Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Socket UDP один сокет, разные порты

Автор вопроса: ReceОтветов: 2

Я новичок в программировании сокетов, поэтому простите меня, если этот вопрос является основным; Я нигде не мог найти ответ.

Что означает требование нового сокета?

Например, оказывается возможным отправлять и получать с одним и тем же сокетом fd на один и тот же порт. Не могли бы вы отправить через порт XXXX и получить через порт YYYY с одним сокетом? Если нет, то специфичны ли сокеты для комбинаций хост/порт?

Спасибо за понимание!

udpsocketsporthostname

Ответы

Ответ 1 · рейтинг 2 · paulsm4

Сокет устанавливает "конечную точку", состоящую из IP-адреса и порта:

Да, один сокет относится к одной комбинации хост/порт.

РЕКОМЕНДАЦИЯ К ЧИТАНИЮ:

Руководство Beej по сетевому программированию:

Сетевое программирование Unix: Стивенс и др.:

Ответ 2 · рейтинг 2 · Manoj Pandey

Номер порта является локальным свойством и помогает идентифицировать конечную точку сокета для входящих данных, предназначенных для этого порта на компьютере-получателе. Каждая машина имеет 64 000 портов для каждого типа протокола (TCP или UDP) и для каждого типа семейства (IPv4 или IPv6).

С UDP можно отправлять (и получать) множество клиентов, сидящих на разных портах. Итак, для следующего соединения:

UDP_socketA (port p1) <---------> UDP socketB (port p2)
     |
     |
     |
     |
UDP socketC (port p3)

Таким образом, socketA может отправлять данные в socketB и socketC, даже если они используют разные номера портов. Это работает так: с сокетами UDP мы обычно используем API sendto(), который позволяет нам указывать IP-адрес и номер порта для каждого пакета. Таким образом, мы можем отправить один пакет на порт B и следующий пакет на порт C, а что нет.

Однако с TCP это не так. Как только соединение установлено, скажем, между сокетом A и сокетом B, ни один из этих сокетов не может общаться с сокетом C.

TCP_socketA (port p1) <---------> TCP socket B (port p2)
         |
         |
         |
         |
    TCP socketC (port p3)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы