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

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

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

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

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


person Rece    schedule 10.10.2013    source источник


Ответы (2)


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

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

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

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

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

person paulsm4    schedule 10.10.2013
comment
Да: один сокет отправляет и получает на один порт; другой сокет может отправлять и получать через другой порт. Клиент подключается к хорошо известному порту (например, 80 для http). Как только соединение установлено, обмен данными происходит через эфемерный порт. - person paulsm4; 10.10.2013

Номер порта является локальным свойством и помогает идентифицировать конечную точку сокета для входящих данных, предназначенных для этого порта на компьютере-получателе. Каждая машина имеет 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)
person Manoj Pandey    schedule 10.10.2013