0

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

4

1 回答 1

0

好,

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

    根据 Java 文档,receive 将阻塞,直到收到包或超时到期。

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

    lastTimeSeen = System.currentTimeMillis();

    在您的线程类中放置一个方法来访问该变量的值。

于 2013-05-16T14:48:28.810 回答