Какие ситуации на стороне клиента требуют bind ()? - PullRequest
11 голосов
/ 07 ноября 2010

Я изучаю программирование на C-сокетах. Когда бы вы использовали bind () на стороне клиента? Каким программам это понадобится и почему? Где я могу найти пример?

Ответы [ 7 ]

13 голосов
/ 07 ноября 2010

На стороне клиента вы можете использовать связывание, только если вы хотите использовать определенный порт на стороне клиента, что встречается редко.Обычно на клиенте вы указываете IP-адрес и порт сервера, а ОС выбирает, какой порт вы будете использовать.Обычно вас это не волнует, но в некоторых случаях на клиенте может быть установлен брандмауэр, который разрешает только исходящие соединения через определенный порт.В этом случае вам нужно будет подключиться к определенному порту, прежде чем попытка подключения будет работать.

4 голосов
/ 07 ноября 2010

Примером может служить соединение для передачи данных активного соединения FTP.В этом случае сервер подключается со своего порта 20 к IP-адресу и порту, указанному командой PORT или EPRT.

3 голосов
/ 08 ноября 2010

Классическим примером клиентской программы, использующей bind(), является (устаревшее) rlogin / rsh семейство сетевых клиентов. Эти клиенты предназначались для использования в сетях с сильными доверительными отношениями - в некоторых случаях серверный сервер доверяет клиентскому компьютеру сообщать ему имя пользователя подключающегося пользователя. Для этого требовалось, чтобы клиентская программа соединялась с низким портом (порт менее 1024), поскольку такие порты ограничены для пользователя root и, таким образом (теоретически) доказывают, что используемый клиент авторизован системным администратором. 1005 *

Протокол NFS имеет аналогичные доверительные отношения, и аналогично клиент устанавливает соединения с небольшим номером порта, используя bind().

Другим примером являются клиенты IRC, которые позволяют пользователю указать IP-адрес определенного источника для подключения. Это делается для размещения пользователей с множеством IP-адресов, назначенных их компьютеру, каждому из которых присваивается отдельное доменное имя «тщеславия». Выбор IP-адреса для подключения (с помощью bind()) позволяет пользователю выбрать, какое доменное имя будет отображаться в IRC.

0 голосов
/ 22 февраля 2018

Хорошая ситуация была бы в случае p2p, когда вы общаетесь с сервером STUN со связанным сокетом, и сервер STUN сообщает вам порт, на который он получает сообщения от вашего сокета (который может отличаться от тот, который вы указали при привязке сокета в зависимости от вашей сети и, более конкретно, от вашего типа NAT). Это позволит вам быть в курсе реального преобразования портов, которое выполняет ваш NAT, и вы сможете передавать эту информацию потенциальным партнерам, которые хотят подключиться к вам. Связывание сокета полезно, так как некоторые NAT динамически предоставляют вам порты (привязка к порту x дважды может не дать вам тот же «реальный» порт). Таким образом, вы сможете напрямую использовать сокет, который вы привязали для прослушивания порта.

0 голосов
/ 26 июля 2016

Полагаю, вы должны связать () в случае сокетов UDP

0 голосов
/ 07 ноября 2010

Bind может использоваться для прикрепления имен к сокетам. Таким образом, скажем, вы создаете программное обеспечение, которое использует определенный порт TCP, вам нужно привязать его, а затем вы будете знать, какой порт TCP он использует.

0 голосов
/ 07 ноября 2010

bind - это одна из ключевых функций.Он связывает ваш сокет (сервер или клиент) с адресом (ip + порт).Что касается Windows, вы должны использовать bind для WinSockets.Об этом есть хорошая книга Энтони Джонса и Джима Олунда «Сетевое программирование для Microsoft Windows».

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