Networking P2P-NAT穿越
我正在用C/POSIX做一个P2P应用程序,我被NAT遍历所困扰 我阅读了多种方法(MiniUPnP、手动端口转发、TCP/UDP打孔)和很多问题,但我发现了一些问题:Networking P2P-NAT穿越,networking,tcp,p2p,nat,hole-punching,Networking,Tcp,P2p,Nat,Hole Punching,我正在用C/POSIX做一个P2P应用程序,我被NAT遍历所困扰 我阅读了多种方法(MiniUPnP、手动端口转发、TCP/UDP打孔)和很多问题,但我发现了一些问题: miniuppp:我看到transmission cli使用它进行端口转发,所以我下载了的源代码并试图理解它,但它太乱了,于是放弃了。我搜索了一些文档来实现它(比如“这个函数需要那个结构来做一些事情,并且会返回这个”),但没有找到任何有用的东西。(我认为这是最干净的方法,因为它只需要使用为此目的而制作的库。如果有人知道如何使用
- miniuppp:我看到transmission cli使用它进行端口转发,所以我下载了的源代码并试图理解它,但它太乱了,于是放弃了。我搜索了一些文档来实现它(比如“这个函数需要那个结构来做一些事情,并且会返回这个”),但没有找到任何有用的东西。(我认为这是最干净的方法,因为它只需要使用为此目的而制作的库。如果有人知道如何使用该代码,请帮助我)
- 手动端口转发:我希望用户不要弄乱路由器的设置,所有工作都应该通过代码完成
- TCP打孔:我读过关于打孔的文章,我认为这是最简单的方法(我也有一个带有公共IP的VPS,所以我可以像会合服务器一样使用它),但我无法在不同的NAT后面连接两个不同的用户
连接被拒绝。休眠2秒
连接被拒绝。睡眠4秒
连接被拒绝。睡眠8秒
连接被拒绝。休眠16秒
连接被拒绝。休眠32秒
最大超时已过期。正在中止…
当然,当另一个NAT下的人试图加入我的NAT下的同龄人时,也会发生这种情况 这就是我的问题:
我看不出PeerB试图在哪里建立连接。打孔的目的是两个对等点都试图相互连接,这在你链接的文章中有解释。当你说B_LOCAL_IP:B_LOCAL_PORT工作时,你的意思是在这种情况下,两个对等点都处于相同的NAT下吗?请看这个答案。添加了PeerB尝试建立连接的部分,但仍然不起作用。它们都被connect()卡住了。一段时间后,我得到“errno=110 connect:Connection timed out”对等点A和B在什么模式下?像主动还是被动还是同时打开?我看不出PeerB试图在哪里建立连接。穿孔的要点是,两个对等点都试图相互连接,这在您链接的文章中有解释。当您说B_LOCAL_IP:B_LOCAL_PORT工作时,您的意思是在这种情况下,两个对等点都处于相同的NAT?Pl下吗请参阅此答案。添加了PeerB尝试建立连接但仍不起作用的部分。它们都被connect()卡住了。一段时间后,我得到了“errno=110 connect:connection timed out”,对等点a和B在什么模式下?主动或被动还是同时打开?