Заставить клиента отвечать на входящие запросы на соединение в C ++ - PullRequest
0 голосов
/ 16 апреля 2020

Я создаю фиктивное P2P-приложение на C ++, и у меня есть концептуальные сомнения. (Я новичок в области сетевых технологий.)

Мой клиент A создает сокет и подключается к серверу. Приходит другой клиент B и запрашивает у сервера IP-адрес и порт клиента A. Теперь клиент B хочет открыть соединение напрямую с A. Я создаю другой поток в клиенте A, который хочет прослушивать входящие запросы на подключение. Пожалуйста, проверьте мое понимание по этим пунктам.

  1. Дескриптор файла, который у меня есть после создания сокета в клиенте A для соединения с сервером, может использоваться только сервером для чтения / записи из него.

  2. Запросы на подключение, которые Клиент B отправляет A, попадут в другую очередь, которая должна обрабатываться отдельно, и будут невидимы для соединения, которое уже имеется у клиента A. В основном это означает, что то, что входит в дескриптор файла, проходит через связанный порт, но то, что входит в порт, может не попасть в дескриптор файла. Только из правильного источника.

  3. Клиент A Необходимо создать новый сокет, связанный с тем же портом и адресом, что и предыдущий, для обработки входящих запросов.

Бест,

1 Ответ

0 голосов
/ 16 апреля 2020

TCP - это соединение «точка-точка», его можно использовать только для одного подключения вашего приложения к другому. Если вы хотите принимать входящие соединения, вам нужен второй сокет (пассивный, прослушивающий), который используется в качестве точки подключения для других приложений. Когда другое приложение подключается к этому (пассивному, прослушивающему) разъему, вы получаете третий разъем для фактического подключения.

Итак:

  1. Да.

  2. Да.

  3. Нет. Ваше соединение от А до сервера может использовать любой произвольный порт. Сокет (пассивный, прослушивающий) в A должен быть привязан к «общеизвестному» порту, к которому подключается приложение B.

...