2015-12-16 3 views
0

У меня есть DatagramSocket, где я получаю в цикле, и в итоге он просто прекращает прием пакетов. Я отправляю серверу приветственное сообщение, которое устанавливает соединение. Затем я начинаю возвращать пакеты, как ожидалось. В конце концов он просто перестает получать.Java UDP 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(); 
+0

Вы уверены, что это не сбой – redFIVE

+0

Определенный. Процесс продолжает работать, никаких исключений не было, и он наверняка останавливается на registerSocket.receive (inboundPacket); –

+0

Вы за NAT? Если это так, вероятно, это связано с отсутствием исходящей активности. –

ответ

2

Если вы находитесь за NAT, отображение будет тайм-аутом, если слишком длительный трафик не будет. Обязательно отправьте исходящую дейтаграмму каждые несколько минут, чтобы поддерживать отображение в маршрутизаторе.

Смежные вопросы