我想将数据从UDP服务器发送到UDP客户端。服务器具有公共IP,并且正在监听已知端口号,因此客户端可以使用UDP向服务器发送数据,但客户端位于NAT后面,并且客户端未在已知端口上进行侦听。当服务器希望发送数据到客户端时,无法发送数据。
客户端能否联系服务器,服务器可以使用客户端网关的端口和公共地址回复吗?
是否有任何方法或良好的方法可以将数据从UDP服务器发送到位于NAT后面的UDP客户端?
是否有任何方法或良好的方法可以将数据从UDP服务器发送到位于NAT后面的UDP客户端?
在大多数情况下,服务器可以在接收到UDP客户端的传入消息后立即发送数据。服务器可以将数据包发送到源IP和端口号。但是,如果服务器想要在需要时随时发送数据,则可能无法正常工作。NAT会清除IP/端口映射。
我能想到一种解决方案,但不是非常有效。UDP客户端应该不断向服务器发送ping请求。这样,它通过保持通信活动来防止NAT清除映射。
http://www.brynosaurus.com/pub/net/p2pnat/
上面给出的链接解释了UDP打洞。