服务器可以直接连接它连接的两个套接字吗?

时间:2018-02-23 11:46:18

标签: c sockets tcp udp

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

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

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

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

1 个答案:

答案 0 :(得分:3)

不,您无法将两个现有TCP连接加入一个。

有两个选项:

1)将服务器保持在中间位置。如果您在一台服务器下没有数千个客户端,那应该不会有问题。

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

选项2存在问题,因为客户端可能具有阻止与所需端口连接的防火墙规则。 NAT也会导致问题。