我已经对NAT遍历做了一些研究,并从网上得到了一些关于P2P应用程序的建议。但我的情况与传统的P2P应用程序有所不同。我已经有一个公共服务器,我只需要从已知的公共服务器访问NAT后面的设备。
有关我案例的详细信息如下:
1.PC-A have public IP
2.PC-B is behind NAT, does not have public IP. In my case PC-A and PC-B is under full control.
3.PC-C is also behind NAT, and could be reached from PC-B
问题在于:
答案 0 :(得分:0)
您的PC-A在P2P通话中通常被称为“中继”。
基本原则是防火墙后面的所有对等方(在您的情况下为PC-B和PC-C)建立与PC-A的出站连接。 PC-A然后“链接/绑定”连接。 通常这些连接是通过HTTP进行的,这是防火墙友好的。因此,对于PC-B与PC-C通信,简化的序列是:
当你投入时,事情变得非常复杂
大多数P2P框架都实现了某种类型的中继。这是JXTA和XMPP(检查ICE)的情况。
我相信Ian Mc Ginniss还开发了一种名为HTTP隧道的东西,作为Netty项目的一部分(最初是替代JXTA继电器,它们有点次优)