2010-09-30 78 views
1

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

-

+0

确保您的端口正在侦听,没有防火墙或任何防病毒限制。 – 2010-09-30 07:52:12

+0

有没有办法在Linux(Fedora)中设置UDP超时设置? – sachin 2010-09-30 11:19:44

+0

'它永远不会到达客户'并​​不意味着'套接字[不活]'。 – EJP 2018-01-22 20:13:08

回答

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”,或读一开始下列:

这些解决方案都需要你采取措施“刷新”NAT绑定以保持防火墙“洞”处于打开状态。

+0

如同事建议的问题,可能是防火墙关闭了UDP连接,如果在一段时间内没有活动,通信是可靠的,需要实施超时探测。 – sachin 2010-10-06 16:39:05

+1

@sachin我认为你的同事的意思是NAT /防火墙设备在一定时间后删除出站数据包创建的自反规则,从而导致响应不被视为响应。 – 2017-04-28 20:01:31

+0

@StephenC是的。这就是答复如何通过。 – 2017-04-29 01:30:40