【问题标题】:How to send Udp packet 2 or 3 times after failed received packet in java?在java中接收数据包失败后如何发送Udp数据包2或3次?
【发布时间】:2013-05-16 11:34:20
【问题描述】:

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

【问题讨论】:

    标签: sockets udp ping keep-alive datagram


    【解决方案1】:

    嗯,

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

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

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

      lastTimeSeen = System.currentTimeMillis();

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-03
      • 2012-05-20
      • 2014-11-14
      • 2011-09-24
      • 2019-01-04
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多