[英]Java - closing the UDP socket
我正在嘗試使用Java模擬UDP。 我正在從一個主機向另一個主機發送文件。 這是接收器的一部分:
server.setSoTimeout(10000);
while (true)
{
try
{
DatagramPacket received = new DatagramPacket(receivedData,receivedData.length);
server.receive(received);
out.write(received.getData());
}
catch (IOException e) {
break;
}
}
server.close();
這個解決方案有效,但由於某些原因我不滿意。
發送方發送所有數據包,然后關閉DatagramSocket。 Receiver獲取所有數據包並終止,但由於超時而終止。
因此,如果打開我的接收器並且10秒內沒有執行任何操作,我的接收器將關閉,因此不會傳輸任何內容。
有沒有一種方法可以在不指定超時的情況下終止循環?
我還想知道是否有其他主機建立連接的方法 - 比如ServerSocket.accept(),它基本上等待其他主機連接。但是,我決定使用DatagramSocket而我找不到解決方案這個問題。
有人知道會執行此操作的方法嗎?
沒有。
數據報(UDP)套接字本質上是無連接的。 關閉DatagramSocket
沒有任何對遠程系統可見的影響。 它可以防止應用程序在該套接字上發送或接收任何其他數據,並釋放該端口以供本地系統上的其他應用程序使用,但不會導致通過網絡發送任何通知。
如果要通知遠程服務器您已完成發送數據,則需要向它們發送數據報以通知它們。
如果您嘗試通過UDP傳輸文件,請記住,不保證收到UDP數據包,也不保證按照傳輸順序接收UDP數據包! (也就是說,它們可能會被網絡丟棄或重新排序。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.