代码之家  ›  专栏  ›  技术社区  ›  Ephemera

服务器能否直接连接其连接的两个套接字?

  •  1
  • Ephemera  · 技术社区  · 6 年前

    假设我在Internet上有一个公共服务器,用C编写,它连接到两个独立的客户端。两个客户端都启动了连接。一个客户端是(例如)iOS应用程序,另一个客户端是本机Windows应用程序。

    我的服务器的目的是允许这些客户端相互发送文本消息。客户端1发送消息,服务器接收消息,然后将其转发到客户端2。当客户端2发送消息时,同样的情况反过来发生。

    这感觉效率很低。我真正希望的是,这两个连接都与服务器联系,然后服务器将这两个客户端直接连接到彼此-之后,我的服务器可以忘记这两个客户端,因为它们负责相互通信。然后,我的服务器可以用同样的方式连接其他客户端。

    我的问题是:这是否可能(使用TCP和/或UDP)?这两个客户端都不一定有公共IP地址,这就是它们必须启动连接的原因。然而,一旦建立了连接,我的服务器就会知道两个客户端的连接地址。有没有办法将它们连接在一起?可能是一个可以做这种事情的系统调用?

    1 回复  |  直到 6 年前
        1
  •  4
  •   SKi    6 年前

    不,不能将两个现有TCP连接连接到一个。

    有2个选项:

    1) 保持服务器处于中间位置,保持原有状态。如果您在一台服务器下没有数千个客户端,这应该不会是问题。

    2) 服务器可以向客户端发送控制消息,并命令这些客户端打开彼此之间的新TCP连接。服务器还应该决定两个客户端中的哪一个必须是新TCP连接的发起方。

    选项2有问题,因为客户端可能有防火墙规则,阻止连接到想要的端口。NAT也会引起问题。