如何在连接到服务器的客户端之间发起直接连接

Dar*_*usz 6 connection networking network-programming tcp

假设我有一个服务器并且客户端连接到服务器。服务器可以通过公共 IP 访问。

我想“转发”连接,以便客户端可以直接相互连接,而无需中间的服务器。

我不知道这是否可能,我自己也找不到办法做到这一点。

其他假设:

  • 两个客户端都没有公共 IP,两个客户端都在 NAT 后面
  • 如有必要,可以启动更多连接

我正在寻找一个严格的软件解决方案,而无需重新配置路由器、开放端口等。

我想实现这一点的原因是减少服务器上的负载。一旦两个客户端关联在一起,就没有真正的需要(技术客户端除外)继续使用服务器作为某种代理。直接客户端连接也会减少连接的延迟。

Mer*_*ert 3

简短的回答是:这是不可能的。

主要问题之一是路由器不知道将来自服务器(或其他客户端)的请求重定向到哪里。仅举一个例子:您有一个路由器,其后面有多个设备(计算机、手机...)。它收到一个请求,但不知道谁想要收到该请求。

有一个解决方法,但它并不可靠(并不总是有效)。如果可能,一些公司会使用它,但如果失败,他们总是有替代方案(例如通过服务器进行通信)。这称为自然冲孔。更多详细信息请参见:http://en.wikipedia.org/wiki/TCP_hole_punching

我不知道你需要什么理由。如果您需要它进行客户端服务器连接,您可以使用长轮询之类的东西,回调......

否则需要设置路由器,或者通过服务器获取路由。