有没有办法在没有中间服务器的情况下通过TCP或UDP建立真正的P2P通信?我明白,如果这两台计算机只有公共IP地址,但如果它们落后于任何类型的NAT路由器,或者在专用网络上它开始变得棘手,那么这是非常可行的......事实上,我越是看起来就越多简直不可能。我发现了STUN,TURN和ICE协议以及打孔,但据我所知,它们都需要某种服务器来至少建立连接。我很惊讶看似如此简单似乎很难做到的事情,我错过了什么? 理想情况下,我正在寻找使用Golang的解决方案任何帮助或C ++中的示例也很有用,谢谢。
答案 0 :(得分:1)
这不是严格意义上的问题 - 这是一个普遍的网络问题。
这是如此困难的原因是因特网从未被设计为支持NAT,NAT刚刚发生并且破坏了许多功能。问题的干净解决方案是切换到没有NAT的IPv6,但这可能是不可能的
如果您的NAT盒支持NAT-PMP或uPNP,您可以使用它。最简单的方法是创建一个绑定到libminiupnpc
的cgo,或者你可以去当地的Go库钓鱼。
如果您的NAT不支持这些协议中的任何一个,那么您可能运气不好,因为打孔是一种脆弱且难以实现的技术,您可能会发现很难实现。