我已经建立了一个网络项目,通过打孔方式通过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个设备,但在同一网络上同时不能同时使用这两个设备?
答案 0 :(得分:2)
我发现我们的一个路由器正在检测从一个客户端发送到另一个客户端的消息包含与服务器不同的目标IP地址,然后我们的路由器决定这些消息应该通过不同的方式发送外部港口。这就是问题的来源。使用一些端口预测,大多数时候都可以克服这个障碍。
对于那些感兴趣的人,大多数时候如果在假定的端口找不到连接,它很可能是在下一个端口(即端口#+ 1)。如果没有,那么从那里开始工作会有点复杂。