簡體   English   中英

Java UDP DatagramSocket 停止接收

[英]Java UDP DatagramSocket stops receiving

我有一個 DatagramSocket,我在其中循環接收數據,它最終只是停止接收數據包。 我向服務器發送一條建立連接的問候消息。 然后我開始按預期接收數據包。 最終它只是停止接收。

發送服務器已驗證他們仍在通過 tcp 轉儲將數據包發送到同一地址,但最終此代碼掛在接收調用上。

有沒有什么會導致套接字停止接收?

String hello = "hello";
InetAddress IPAddress = InetAddress.getByName("serveraddress");

DatagramPacket outboundPacket = new DatagramPacket(hello.getBytes(),hello.getBytes().length, IPAddress, 54321 );
DatagramSocket registerSocket = new DatagramSocket(61646);
registerSocket.send(outboundPacket);
int count = 0;
while(!done){

    count++;
    byte[] inboundData = new byte[1368];
    DatagramPacket inboundPacket = new DatagramPacket(inboundData,inboundData.length);

    System.out.println(registerSocket.getPort());
    System.out.println(registerSocket.getLocalPort());

//Eventually locks up here after hundreds of successful receives
    registerSocket.receive(inboundPacket);

    byte[] data = inboundPacket.getData();
    String test = new String(data, "ISO-8859-1");
    System.out.println(test+"---"+count);
}

registerSocket.close();

如果您落后於NAT,如果沒有出站流量的時間太長,映射將超時。 確保每隔幾分鍾發送一次出站數據報,以使映射在路由器中保持活動狀態。

從問題中不清楚,您是否在一個進程中使用多個 DatagramSockets:這將是非常重要的。 Java:Receiving an UDP datagram packet with multiple DatagramSockets

除非使用多播,否則新創建的數據報套接字將繼承進程的接收 cursor 並限制現有的接收。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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