实际上,这是可能的。您可能想在谷歌上搜索称为“UDP 打孔”或“TCP 打孔”的东西。
简而言之,主要方法是:假设您有类似中继服务器的东西,它是互联网中的某些服务器,可以从连接到 www 的每个私有 LAN 公开寻址。不,您的两个客户端 A 和 B 在(不同的)私有 LAN 中,并且正在进行一些网络地址转换 (NAT),它们想要建立对等连接。
首先,两者都会告诉服务器他们的 IP 地址和他们在自己的 LAN 中的端口。在 UDP 或 TCP 数据包中,服务器会找到设备(或 NAT(路由器))的公共地址和端口。因此服务器知道私有和公共 IP 地址以及端口。
如果现在 A 想与 B 通信,它会向服务器寻求帮助。服务器将向 B 发送一条消息,表明 A 想与她通信,告诉她 A 的公共和私有 IP 和端口。A 取回 B 的公私信息和端口。
现在这里是魔法发生的地方。两个客户端现在都发送数据包以同时建立与另一方的私有和公共地址的连接,从而在他们的 NAT 中打入一个整体,这样传入的连接就不会被阻塞。即使一方的连接建立数据包会在整个创建之前到达,另一方的数据包也会通过,以便可以创建连接。
当心一些 NAT 扫描 IP 地址数据并转换它们,但如果您加密数据或更改地址的外观(补码,...),您会没事的。
现在的主要问题是,服务器如何在没有活动连接的情况下与其中一个客户端通信。那么在这种情况下,您可以使用“连接反转”和苹果的“推送通知”。使用“推送通知”(pn) 告诉 NAT 后面的客户端有一些有趣的事情正在发生,它应该联系服务器。一旦完成,连接就处于活动状态并且可以按照前面描述的方式使用。
我希望这可以帮助一些解决这个问题的人,尽管这篇文章已经很老了!