簡體   English   中英

Java - 關閉UDP套接字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM