Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UDP打孔失败,但测试表明它应该可以工作(移动网络)_Udp_Nat_Hole Punching - Fatal编程技术网

UDP打孔失败,但测试表明它应该可以工作(移动网络)

UDP打孔失败,但测试表明它应该可以工作(移动网络),udp,nat,hole-punching,Udp,Nat,Hole Punching,在过去的两周里,我一直在尝试实现udp打孔,但都没有成功,但我不知道为什么。我知道打孔算法不能保证工作,但我相信它应该在我的测试用例中工作,因为我注意到,一旦我在家庭网络上绑定套接字,端口与外部世界的连接与本地端口相同,并且对于从该套接字进行的所有连接都保持这种方式。在审查我的试验后,如有任何帮助,将不胜感激 我有三台电脑,我的osx桌面,我的iPhone和我的AmazonEC2AMI 在桌面上,我构建了一个cocoa应用程序,它使用GCDAsyncUDPSocket库绑定一个端口并联系ec2服

在过去的两周里,我一直在尝试实现udp打孔,但都没有成功,但我不知道为什么。我知道打孔算法不能保证工作,但我相信它应该在我的测试用例中工作,因为我注意到,一旦我在家庭网络上绑定套接字,端口与外部世界的连接与本地端口相同,并且对于从该套接字进行的所有连接都保持这种方式。在审查我的试验后,如有任何帮助,将不胜感激

我有三台电脑,我的osx桌面,我的iPhone和我的AmazonEC2AMI

在桌面上,我构建了一个cocoa应用程序,它使用GCDAsyncUDPSocket库绑定一个端口并联系ec2服务器,其中使用apache mina库的java应用程序存储套接字外部ip/端口,并将其与负载中传递的用户名相关联

位于AT&T网络上的iphone运行一个应用程序,该应用程序使用相同的GCDAsyncUDPSocket库以相同的用户名与ec2服务器联系,然后ec2查找用户名,查找桌面信息,并通知桌面iphone地址和iphone桌面地址

现在,iphone和台式机相互了解,他们开始互相发送数据包,希望得到一个穿孔

从理论上讲,这应该是可行的,但也许我在移动网络方面遗漏了一些让这变得困难的东西?但是,再次在第四台外部计算机上运行一个简单的udp回音器来手动发送消息,桌面也不起作用,所以可能是我的路由器,但我不明白这是怎么回事,因为我所有的测试都表明桌面请求的端口与路由器分配的端口相同

我已经在这方面工作了将近两周,几乎没有什么进展,任何提示都将不胜感激

“一旦我在家庭网络上绑定套接字,外部世界的端口与本地端口相同”


我对此深表怀疑。要遍历已向第三方发送数据报的给定对等方A和B:S,您需要使用S看到的公共IP和S看到的端口(即不是端口A,B从他们的角度来看是绑定的)从A向B发送数据报,反之亦然

这并没有回答问题,应该是一个评论。这可能是,也可能不是,但这是一个可能的答案——这就是它不起作用的原因——我是说,从外部看,港口不同,他需要考虑地址和港口。