我有一些关于套接字编程的基本问题。我正在尝试编写一个程序(用C,linux),其中多个客户端进程连接到服务器进程,并且客户端也需要连接到它们自己。尽管客户端可能驻留在不同的计算机上,但它们位于同一台计算机上也是一种情况。这些是我的问题。
两个客户端进程可以在单独的端口上相互通信吗?在这种情况下,它们都不会监听端口(就像服务器所做的那样)。他们只是使用套接字连接到端口并相互通信。这可能吗?
如果没有,我如何在客户端之间进行通信?
对此的任何想法都会有所帮助。谢谢。
最佳答案
不,在 TCP 中这是不可能的。在 TCP 中建立连接时,您始终连接到监听端口,因此其中一个客户端必须监听。
其中一个客户端需要打开监听端口,但是哪一个呢? 使用服务器作为仲裁者!采用服务器调节的协议(protocol):
- 服务器决定哪个客户端打开端口
- 客户端打开端口,监听它并将其地址(主机:端口)发送到服务器
- 服务器将其发送给另一个客户端
- 其他客户端现在可以连接了!
如果您询问两个进程是否可以监听同一台计算机上的同一端口,那么答案是否定的。但使用上述协议(protocol)就可以避免这种情况。
关于同一台机器上的两个进程可以连接到同一个端口吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796054/