我有一个简单的客户端应用程序,它将udp数据报发送到具有已知IP地址和端口的服务器,并等待响应。客户端可以在任何计算机或移动设备上启动,它可以位于多个路由器和防火墙后面......服务器应用程序侦听客户端数据报的某个端口,并回答客户端点。服务器应用程序适用于具有正确配置的防火墙等的Windows计算机。因此,据我所知,这个简单的方案应该适用于客户端的位置和他的防火墙设置。但看起来它在大约75%的配置中都不起作用。服务器在100%的情况下接收来自客户端的请求,但在75%的情况下,客户端无法从服务器接收响应,即它看起来总是被某些东西阻止(服务器尝试10次向客户端发送答案,但没有运气,即客户没有收到任何东西)。我尝试了许多不同配置的客户端计算机,以找出这些问题的原因以及我发现的内容:
在某些情况下,简单的Windows防火墙可以阻止响应数据包(但它是如何实现的?据我所知,无论防火墙设置如何,所有响应数据包都必须转发回客户端。)
某些硬件防火墙或NAT也可以阻止响应UDP数据包。而且,我无法理解为什么它可能成为可能?
问题是 - 有没有可靠的方法来向客户提供答案?据我所知,许多程序,如Skype,即使有所有这些网络“障碍”,也能正常使用UDP。
谢谢!