1

我正在开发一个与网络相关的程序,并且存在客户端必须连接到局域网内的服务器的情况。

据我所知,在建立 TCP 连接时,服务器正在侦听的端口必须可供客户端访问。如果服务器位于 LAN 内,则端口访问会被路由器阻止。我知道的一种解决方案是使用 UPnP 在路由器上执行端口映射。但是,在某些情况下,路由器不支持 UPnP,是否有其他解决方案?

我想到了 IM 应用程序。许多 IM 应用程序具有用户可以相互发送文件的功能,无论网络环境如何,只要您可以访问 Internet。我不认为公共服务器用作两者之间的文件数据交换器,连接必须是直接连接。他们实际上如何使客户端连接到“隐藏”服务器?

4

2 回答 2

0

如果 uPnP 或开放端口不能在一端或另一端完成,那么剩下的唯一选择似乎是通过中间的服务器传递它

于 2012-10-25T12:15:29.567 回答
0

通常,此类程序会尝试一系列步骤:

  1. A直接连接到B
  2. B 直接连接到 A
  3. A 尝试连接到防火墙 (uPnP) 转发端口到 B
  4. B 尝试连接到防火墙 (uPnP) 转发端口到 A
  5. A 和 B 都连接到中央服务器并通过该服务器交换数据

最后一步显然是最不受欢迎的,因为提供商必须有足够的资源来管理所有同时传输。速率限制很常见。

由于 IM 无论如何都有中央管理,因此协调这一切并不难。

于 2012-10-25T13:27:26.313 回答