iOS上的UDP打孔
我已经建立了一个网络项目,通过打孔在LAN或WAN上进行通信。我正在为客户端使用GCSAsyncUdpSocket。我有一个会合服务器,它是端口转发的,可以从所有传入连接访问。我的设置如下所示:iOS上的UDP打孔,ios,udp,hole-punching,Ios,Udp,Hole Punching,我已经建立了一个网络项目,通过打孔在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 Clien
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
我不明白的是,它是如何在每个网络上都有一个设备的情况下单向工作的,但在同一网络上的两个设备上却完全不工作 我发现我们的一个路由器检测到从一个客户端发送到另一个客户端的消息包含不同的目标IP地址,然后我们的路由器决定这些消息应该通过不同的外部端口发送。这就是问题的根源。通过一些端口预测,这个障碍在大多数情况下都可以克服
对于那些感兴趣的人来说,大多数情况下,如果在假定的端口上找不到连接,则很可能是在下一个端口(即端口#+1)上。如果不是的话,那就有点复杂了 嗨,你能分享代码吗?或者给我任何链接,使连接像你一样?我能为你做的最好的是建议你研究端口预测方法,主要是端口遍历。你可能需要做一些挖掘和研究,但这一页似乎很有帮助。基本上,您必须猜测路由器分配给每个客户机的端口号。要记住的另一件事是,客户端只接受来自其最近尝试与之通信的IP地址和端口号的传入消息。这是一个非常冗长的话题,需要大量的尝试和错误。谢谢你的回复