首页 文章

UDP响应未到达客户端

提问于
浏览
1

我正在开发一个应用程序,它发送UDP数据包以启动处理,并需要在3-5分钟后在同一个套接字上发回响应,但问题是当响应被发回时,它永远不会到达客户端 . 我正在使用java . 有什么建议,我们如何在更长的时间内保持套接字存活?

1 回答

  • 1

    有什么建议,我们如何在更长的时间内保持套接字存活?

    有没有办法设置UDP超时设置...?

    UDP是无连接的 . 如果应用程序绑定到UDP服务器套接字并侦听,它可以等待消息无限期到达 .

    另一方面是无法在协议/套接字级别检测丢失的UDP消息 . 如果一台机器向另一台机器发送UDP消息,则第一台机器无法直接知道消息是否已到达?没有传输级别超时来告诉发件人重新传输 .

    如果您需要可靠性,超时,自动重传等,则最好使用基于连接的传输协议,例如TCP .

    根据同事建议的问题,如果在一段时间内没有活动,防火墙可能会关闭UDP连接,因为通信是可靠的,需要实现超时探测 .

    从表面上看,这种解释是荒谬的 . UDP是无连接的,因此没有连接关闭或保持活动状态 .

    真正的解释可能是以下之一:

    • UDP请求或UDP回复被一台或另一台机器上的防火墙软件或网络中的某个地方阻止 .

    • 关于发送或接收消息的方式有些不对 .

    • 您正在尝试通过NAT网关发送UDP消息;例如到无法从另一个路由到IP地址的计算机 . 需要特殊措施(例如UDP hole punching)才能将UDP流量传送到NATed主机,并且可能需要发送保持活动数据包以防止"UDP hole"超时 .

    如果您尝试从Java通过NAT防火墙发送UDP,则可以使用各种(第三方)Java库来执行此操作 . 与“java”和“udp”一起搜索“stun”和“turn”或“ice”,或者阅读以下内容:

    这些解决方案都要求您采取措施“刷新”NAT绑定以保持防火墙“漏洞”打开 .

相关问题