Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在udp连接中绕过NAT/防火墙_C++_Networking_Udp_Nat - Fatal编程技术网

C++ 如何在udp连接中绕过NAT/防火墙

C++ 如何在udp连接中绕过NAT/防火墙,c++,networking,udp,nat,C++,Networking,Udp,Nat,我正在编写语音聊天应用程序,但问题是当客户端使用路由器防火墙块连接时 我用tcp连接解决了这个问题,但用udp连接我不知道如何解决这个问题 我试着按这一步做 客户端A发送到(服务器)的ip和用户名 客户端B发送到(服务器)ip和用户名 (服务器)发送到客户端B客户端A信息-开始语音聊天 (服务器)向客户端A发送客户端B信息-启动语音聊天 但是这项工作一次又一次都不起作用,我不知道为什么。 任何帮助。您尝试的是UDP打孔。但很少有路由器具有对称NAT,穿孔非常困难且不一致(如果可能)。在维基百科上

我正在编写语音聊天应用程序,但问题是当客户端使用路由器防火墙块连接时

我用tcp连接解决了这个问题,但用udp连接我不知道如何解决这个问题

我试着按这一步做

  • 客户端A发送到(服务器)的ip和用户名
  • 客户端B发送到(服务器)ip和用户名
  • (服务器)发送到客户端B客户端A信息-开始语音聊天
  • (服务器)向客户端A发送客户端B信息-启动语音聊天
  • 但是这项工作一次又一次都不起作用,我不知道为什么。
    任何帮助。

    您尝试的是UDP打孔。但很少有路由器具有对称NAT,穿孔非常困难且不一致(如果可能)。在维基百科上阅读不同的NAT,你会得到更多的了解。

    NAT punchthrough需要一个外部“匹配”服务器,除了非对称路由器和防火墙之外,其他所有服务器都可以。简单地说,每次更改IP或目标端口时,这些“对称”路由器都会更改数据的出站/入站端口,从而有效地取消服务器尝试执行的“匹配”

    还有其他一些“狡猾”的打通方式,但缺乏连贯性


    我建议您阅读NAT类型的差异(不对称、对称、全锥、受限锥、端口受限锥)。另外,请确保您阅读了有关STUN的信息,该信息允许您识别您的客户机背后操作的NAT类型。最后,您应该了解UPnP,这是大多数路由器都具有的功能,允许程序自行注册和打开端口,而用户无需通过路由器接口手动进行注册。

    尝试使用小型UDP数据包。例如,每个UDP数据包最多1000字节。有用信息。但是你打字打错了吗?”“非对称”意味着它需要对称,那么你说对称路由器无效?你的回答中有一个矛盾。