TCP/IP 通过全球互联网连接的连接 (C/C++)
TCP/IP connection over global internet connection (C/C++)
本质上,我一直在尝试使用标准套接字编程使用 c/c++ 在两台计算机之间中继消息。在 LAN 上一切正常。问题是使用外部 ip 地址之类的东西建立连接。我在网上搜索并看到提到确保路由器配置为“端口转发”的方法。但是,我想知道像 qTox 这样的点对点通信应用程序如何克服这一障碍,因为它们不需要该技术步骤?总而言之,如何在不在同一网络上的两台计算机之间连接两个套接字?
下面是我们通常用来解决问题的一些方法。
如果你能在WLAN中使用一台服务器作为中继或中央控制器,那就很简单了。计算机连接到服务器,服务器为它们更改消息并可以执行更多操作。
如果您不想使用服务器,那么问题来了:NAT 设备可能会根据其类型丢弃那些尚未建立连接的数据包。这里有四种类型:full cone NAT、restricted NAT、port restricted NAT和symmetric NAT。这里有一些针对这种情况的方法
2.1 使用NAT穿越算法,但在对称NAT中可能效果不佳
2.2 使用STUN/TURN/ICE实现NAT穿越,比较靠谱,但需要学习使用
本质上,我一直在尝试使用标准套接字编程使用 c/c++ 在两台计算机之间中继消息。在 LAN 上一切正常。问题是使用外部 ip 地址之类的东西建立连接。我在网上搜索并看到提到确保路由器配置为“端口转发”的方法。但是,我想知道像 qTox 这样的点对点通信应用程序如何克服这一障碍,因为它们不需要该技术步骤?总而言之,如何在不在同一网络上的两台计算机之间连接两个套接字?
下面是我们通常用来解决问题的一些方法。
如果你能在WLAN中使用一台服务器作为中继或中央控制器,那就很简单了。计算机连接到服务器,服务器为它们更改消息并可以执行更多操作。
如果您不想使用服务器,那么问题来了:NAT 设备可能会根据其类型丢弃那些尚未建立连接的数据包。这里有四种类型:full cone NAT、restricted NAT、port restricted NAT和symmetric NAT。这里有一些针对这种情况的方法
2.1 使用NAT穿越算法,但在对称NAT中可能效果不佳
2.2 使用STUN/TURN/ICE实现NAT穿越,比较靠谱,但需要学习使用