Joe W
Joe W

Reputation: 2891

Java UDP DatagramSocket stops receiving

I have a DatagramSocket where I'm receiving in a loop and it eventually just stops receiving packets. I send the server a hello message that establishes the connection. Then I start reciving packets as expected. Eventually it just stops receiving.

The sending server has verified that they are still sending packets to the same address via tcp dump but eventually this code hangs on the receive call.

Is there anything that would cause the socket to stop receiving?

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();

Upvotes: 1

Views: 954

Answers (2)

Sam Ginrich
Sam Ginrich

Reputation: 851

Not clear from the question, whether you work with several DatagramSockets inside one process: This would be non-trivial. See Java: Receiving an UDP datagram packet with multiple DatagramSockets

Unless using multicast, a newly created datagram socket will inherit the process' receiving cursor and clamp the existing one from receiving.

Upvotes: 0

David Schwartz
David Schwartz

Reputation: 182883

If you're behind NAT, the mapping will time out if there's no outbound traffic for too long. Make sure to send an outbound datagram every few minutes to keep the mapping active in the router.

Upvotes: 2

Related Questions