Могут ли два процесса на одной машине подключаться к одному и тому же порту? - PullRequest
2 голосов
/ 17 октября 2011

У меня есть несколько основных вопросов о программировании сокетов. Я пытаюсь написать программу (на C, Linux), в которой несколько клиентских процессов подключаются к серверному процессу, а также клиенты должны подключаться к себе. Хотя клиенты будут находиться на разных машинах, они также находятся на одной машине. Это мои вопросы.

  1. Могут ли два клиентских процесса взаимодействовать друг с другом через отдельный порт? В этом случае никто из них не слушает порт (как, например, сервер). Они просто подключаются к порту с помощью сокета и разговаривают друг с другом. Это возможно?

  2. Если нет, как я могу установить связь между клиентами?

Любая идея по этому поводу поможет. Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 октября 2011
  1. нет , в TCP это невозможно. При установлении соединения в TCP вы всегда подключаетесь к порту прослушивания, поэтому один из клиентов должен listen.

  2. один из клиентов должен открыть порт прослушивания, но какой? Использовать сервер в качестве арбитра ! Используйте протокол, где сервер модерирует:

    • сервер решает, какой клиент откроет порт
    • этот клиент открывает порт, слушает его и отправляет свой адрес (хост: порт) на сервер
    • серверы отправляют его другому клиенту
    • другой клиент может подключиться сейчас!

И если вы спрашивали, могут ли два процесса прослушивать один и тот же порт на одном компьютере, ответ будет отрицательным. Но, используя приведенный выше протокол, вы можете избежать этой ситуации.

1 голос
/ 17 октября 2011
  1. Если вы хотите, чтобы клиенты общались друг с другом, используйте сервер, который прослушивает порт и направляет другому клиенту только указание нужным клиентам.
  2. Если вы этого не делаетеЕсли вы хотите использовать сервер, то в вашем клиентском приложении вы должны сделать один порт для прослушивания, а другой - для плевания данных.Так что речь пойдет только один на один.

Если я правильно понял ответ, который вы ищете: Да, два процесса на одном компьютере могут подключаться к одному и тому же порту.Это просто две разные сущности, пытающиеся подключиться к серверу.

1 голос
/ 17 октября 2011

Для сокета всегда требуется соединение и сторона для прослушивания - одна сторона должна слушать.Пусть один клиентский процесс создаст порт прослушивания, а другой подключится к этому порту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...