同一台机器上的两个进程可以连接到同一个端口吗?

标签 c linux sockets port

我有一些关于套接字编程的基本问题。我正在尝试编写一个程序(用C,linux),其中多个客户端进程连接到服务器进程,并且客户端也需要连接到它们自己。尽管客户端可能驻留在不同的计算机上,但它们位于同一台计算机上也是一种情况。这些是我的问题。

  1. 两个客户端进程可以在单独的端口上相互通信吗?在这种情况下,它们都不会监听端口(就像服务器所做的那样)。他们只是使用套接字连接到端口并相互通信。这可能吗?

  2. 如果没有,我如何在客户端之间进行通信?

对此的任何想法都会有所帮助。谢谢。

最佳答案

  1. ,在 TCP 中这是不可能的。在 TCP 中建立连接时,您始终连接到监听端口,因此其中一个客户端必须监听。

  2. 其中一个客户端需要打开监听端口,但是哪一个呢? 使用服务器作为仲裁者!采用服务器调节的协议(protocol):

    • 服务器决定哪个客户端打开端口
    • 客户端打开端口,监听它并将其地址(主机:端口)发送到服务器
    • 服务器将其发送给另一个客户端
    • 其他客户端现在可以连接了!

如果您询问两个进程是否可以监听同一台计算机上的同一端口,那么答案是否定的。但使用上述协议(protocol)就可以避免这种情况。

关于同一台机器上的两个进程可以连接到同一个端口吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796054/

相关文章:

c - long long 是 C 中的一种类型吗?

c++ - windows 和 unix/linux 下的 Socket 编程混淆

sockets - sslscan.c :94:25: fatal error: openssl/err. h : No such file or directory compilation terminated. #163

c - 0177 与 177 及其补语

C - 写入文件给我符号而不是数字

c - 如果在 main 中添加了元素,则在 C 中查找链表的元素可以工作,但如果没有添加则不行?

linux - Sudo su 不询问密码从 Sudo 用户切换到 Root 用户

c++ - 如何使用 Eclipse ubuntu 设置 SDL2

linux - 在 Windows 7 客户端和 Linux 服务器之间同步的最佳程序

c - 独立进程间的套接字句柄传递