2

我已经建立了一个网络项目,通过打孔通过 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 台设备单向工作,但在同一网络上的两台设备根本不工作?

4

1 回答 1

2

从那以后,我发现我们的一个路由器正在检测从一个客户端发送到另一个客户端的消息包含发送到服务器的不同目标 IP 地址,然后我们的路由器决定这些消息应该通过不同的外部端口发送。这就是问题的来源。使用一点端口预测,大多数时候可以克服这个障碍。

对于那些感兴趣的人,大多数情况下,如果在假定的端口上找不到连接,它很可能在下一个端口(即端口# + 1)。如果没有,从那里开始工作会变得有点复杂。

于 2013-09-09T15:44:56.827 回答