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

时间:2011-10-17 15:32:57

标签: c linux sockets port

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

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

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

  3. 对此有任何想法都会有所帮助。感谢。

3 个答案:

答案 0 :(得分:2)

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

  2. 其中一个客户端需要打开监听端口,但是哪一个? 将服务器用作仲裁者!使用服务器管理的协议:

    • 服务器决定哪个客户端将打开端口
    • 客户端打开端口,侦听它并将其地址(host:port)发送到服务器
    • 服务器将其发送给其他客户端
    • 其他客户端现在可以连接!
  3. 如果你问两个进程是否可以在同一台机器上的同一端口上侦听,那么答案就是否定。但是使用上述协议可以避免这种情况。

答案 1 :(得分:1)

套接字连接总是需要一个连接和一个监听端 - 一方需要监听。让一个客户端进程创建一个侦听端口,另一个连接到此端口。

答案 2 :(得分:1)

  1. 如果您想让客户互相沟通,请使用侦听端口的服务器,并指向其他客户端,只需指向正确的客户端。
  2. 如果您不想使用服务器,那么在您的客户端应用程序中,您必须创建一个用于侦听的端口和另一个用于吐出数据的端口。所以这只是一对一的谈论。
  3. 如果我对您正在寻找的答案是正确的:是的,同一台机器上的两个进程可以连接到同一个端口。它只是两个不同的实体试图连接到服务器。