1

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

我有三台电脑,我的 osx 台式机、我的 iPhone 和我的 amazon ec2 ami。

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

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

现在 iphone 和桌面互相了解,他们开始互相射击数据包,希望能打个洞。

理论上这应该可行,但也许我错过了一些关于移动网络的东西,这会使这变得困难?但是再次在第四台外部计算机上运行一个简单的 udp echoer 来手动 msg 桌面也不起作用,所以也许它是我的路由器,但我不明白这是怎么回事,因为我所有的测试都表明桌面要求的端口for 与路由器分配的相同。

我已经在这工作了近两个星期,进展甚微,任何提示将不胜感激!

4

1 回答 1

0

“一旦我在我的家庭网络上绑定了我的套接字,端口对于外部世界和本地端口是一样的”

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

于 2013-06-29T09:45:22.570 回答