我正在开发一个应用程序,它发送UDP数据包以启动处理,并且需要在3-5分钟后在同一个套接字上发回响应,但问题是当响应被发回时,它永远不会到达客户端。 我正在使用java。有什么建议,我们如何在更长的时间内保持套接字存活?
-
答案 0 :(得分:1)
有什么建议,我们如何在更长的时间内保持套接字存活?
和
有没有办法设置UDP超时设置......?
UDP是无连接的。如果应用程序绑定到UDP服务器套接字并侦听,它可以等待消息无限期到达。
另一方面是无法在协议/套接字级别检测丢失的UDP消息。如果一台机器向另一台机器发送UDP消息,则第一台机器无法直接知道消息是否已到达?没有传输级别超时来告诉发件人重新传输。
如果您需要可靠性,超时,自动重传等,您最好使用基于连接的传输协议,例如TCP。
同事建议的问题可能是,如果在一段时间内没有活动,防火墙会关闭UDP连接,因为通信是可靠的,需要实现超时探测。
从表面上看,这种解释是荒谬的。 UDP是无连接的,因此没有关闭或保持活动的连接。
真正的解释可能是以下之一:
UDP请求或UDP回复被一台或另一台机器上的防火墙软件或网络中的某个地方阻止。
有关发送或接收邮件的方式不正确。
您正在尝试通过NAT网关发送UDP消息;例如到无法从另一个路由到IP地址的计算机。需要UDP hole punching等特殊措施才能将UDP流量传输到NATed主机,并且可能需要发送保持活动数据包以防止“UDP漏洞”超时。
如果您尝试从Java通过NAT防火墙发送UDP,则可以使用各种(第三方)Java库来执行此操作。与“java”和“udp”一起搜索“stun”和“turn”或“ice”,或者阅读以下内容:
这些解决方案都要求您采取措施“刷新”NAT绑定,以防止防火墙“漏洞”。