【发布时间】:2013-08-15 10:03:15
【问题描述】:
我已经建立了一个网络项目,通过打孔通过 LAN 或 WAN 进行通信。我正在为客户端使用 GCSAsyncUdpSocket。我有一个集合服务器,它的端口被转发,可以从所有传入连接访问。我的设置是这样的:
Client A connects to the server.
Client B connects to the server.
Server observes the IP address and Port used by both clients.
Server tells Client A to communicate with public IP Address B and public Port B.
Server tells Client B to communicate with public IP Address A and public Port A.
Client A sends periodic data to Client B.
Client B sends periodic data to Client A.
这有点奇怪。虽然客户端在同一个网络上,我们在两个网络上都尝试过,但没有任何效果。但是,如果设备连接到不同的网络(都与不同的供应商并且没有直接链接),那么其中一个设备会接收数据,而另一个不会。
这也无法完全在 3G 上运行。
我不明白的是,它是如何在每个网络上使用 1 台设备单向工作的,但对于同一网络上的两台设备却根本不工作?
【问题讨论】:
-
嗨,你能分享一下代码吗?或者给我任何链接以建立像你这样的连接?
-
我能为您做的最好的事情是建议您研究端口预测方法,主要是端口遍历。您可能需要对其进行大量挖掘和研究,但此页面似乎很有帮助。 deusty.com/2007/07/nat-traversal-port-prediction-part-1-of.html 本质上,您必须猜测路由器分配给每个客户端的端口号。要记住的另一件事是,客户端只会接受来自最近尝试与之通信的 IP 地址和端口号的传入消息。这是一个非常冗长的话题,需要大量的反复试验。
-
感谢您的回复
标签: ios udp hole-punching