Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ 通过全局internet连接的TCP/IP连接(C/C+;+;)_C++_C_Sockets_Tcp_P2p - Fatal编程技术网

C++ 通过全局internet连接的TCP/IP连接(C/C+;+;)

C++ 通过全局internet连接的TCP/IP连接(C/C+;+;),c++,c,sockets,tcp,p2p,C++,C,Sockets,Tcp,P2p,本质上,我一直在尝试使用c/c++和标准套接字编程在两台计算机之间传递消息。在局域网上一切正常。问题是使用诸如外部ip地址之类的东西进行连接。我在网上搜索了一些方法,其中提到确保路由器配置为“端口转发”。然而,我想知道像qTox这样的点对点通信应用程序如何克服这个障碍,因为它们不需要那个技术步骤?总而言之,如何在不在同一网络上的两台计算机之间连接两个插座?以下是我们通常用于解决此问题的一些方法 如果您可以使用WLAN中的服务器作为中继或中央控制器,则非常简单。计算机连接到服务器,服务器为它们更改

本质上,我一直在尝试使用c/c++和标准套接字编程在两台计算机之间传递消息。在局域网上一切正常。问题是使用诸如外部ip地址之类的东西进行连接。我在网上搜索了一些方法,其中提到确保路由器配置为“端口转发”。然而,我想知道像qTox这样的点对点通信应用程序如何克服这个障碍,因为它们不需要那个技术步骤?总而言之,如何在不在同一网络上的两台计算机之间连接两个插座?

以下是我们通常用于解决此问题的一些方法

  • 如果您可以使用WLAN中的服务器作为中继或中央控制器,则非常简单。计算机连接到服务器,服务器为它们更改消息,并可以执行更多操作

  • 如果您不想使用服务器,那么这里有一个问题:NAT设备可能会根据其类型丢弃那些尚未建立连接的数据包。这里有四种类型:全锥NAT、受限NAT、端口受限NAT和对称NAT。这里有一些解决这种情况的方法

    2.1使用NAT遍历算法,但在对称NAT中可能无法正常工作

    2.2使用眩晕/转身/冰来实现NAT穿越,这非常可靠,但需要学习如何使用它们


  • 他们使用UDP/TCP打孔。我只是尝试在谷歌搜索“UDP打孔”,并立即得到结果。你自己试过吗?我试过。我想看看是否有任何建议可以缩小我的搜索范围。不知道你所说的“建议”是什么意思。对我来说,第一个热门话题是维基百科的一篇文章,它一步一步地描述了它的工作原理。