如何在java中收到失败的数据包后发送Udp数据包2或3次?

时间:2013-05-16 11:34:20

标签: sockets udp ping keep-alive datagram

我已将 Udp 数据包发送到服务器。如果服务器正常,那么我可以很好地收到响应数据包,但是当服务器关闭时,我没有得到任何响应数据包。任何人都可以帮助我,当无法接收响应数据包时,如何将数据包发送到服务器多次。而且,想要保持与服务器的连接。提前谢谢。

1 个答案:

答案 0 :(得分:0)

好吧,

  1. 发送数据包后,等待来自服务器的ACK(响应)程序包。您可以将DatagramSocket.setSoTimeout()用于适当的时间,如果您获得Timeout Exception增量计数器,如果该计数器小于2/3,则再次发送数据包并重复这些步骤。如果计数器大于2/3,服务器已关闭,则退出。

    根据Java文档,接收将阻止,直到收到包或超时已到期。

  2. 要保持连接处于活动状态,您需要实现乒乓。在程序的另一个线程中,您发送一个Keep-Alive数据包(任何小数据包都可以)并等待响应。我建议为此目的使用不同的端口号,以便这些数据包不会弄乱正常的数据包。这些数据包可以每2秒发送一次,2分钟取决于您的特定需求。当线程收到ACK数据包时,它将使用当前时间更新私有时间变量,例如:

    lastTimeSeen = System.currentTimeMillis();

    在线程类中添加一个方法来访问该变量的值。