假设我在 Internet 上有一个用 C 编写的公共服务器,它连接到两个独立的客户端。两个客户端都发起了连接。一个客户端是(例如)iOS 应用程序,另一个是本机 Windows 应用程序。
我的服务器的目的是允许这些客户端相互发送文本消息。客户端 1 发送消息,服务器接收它,然后将其转发到客户端 2。当客户端 2 发送消息时,同样的事情会反过来发生。
这感觉效率低下。我真正想要的是让这两个连接都联系服务器,然后让服务器将这两个客户端直接相互连接 - 之后我的服务器可以忘记这两个客户端,因为它们负责相互通信。然后我的服务器可以以相同的方式自由连接其他客户端。
我的问题是:这甚至可能(使用 TCP 和/或 UDP)吗?两个客户端都不一定有公共 IP 地址,这就是它们必须发起连接的原因。但是,一旦建立连接,我的服务器就知道两个客户端的连接地址。有没有办法将它们连接在一起?也许可以做这种事情的系统调用?
不,您不能将两个现有的 TCP 连接加入一个。
有2个选项:
1)保持你的服务器在中间,因为它已经是。如果您在一台服务器下没有数千个客户端,那应该没有问题。
2) 服务器可以向客户端发送控制消息,并命令这些客户端之间打开新的 TCP 连接。服务器还应该决定两个客户端中的哪一个必须是新 TCP 连接的发起者。
选项 2 有问题,因为客户端可能有防火墙规则阻止连接到所需端口。NAT 也会导致问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句