Я новичок в программировании сокетов, поэтому простите меня, если этот вопрос является основным; Я нигде не мог найти ответ.
Что означает требование нового сокета?
Например, оказывается возможным отправлять и получать с одним и тем же сокетом fd на один и тот же порт. Не могли бы вы отправить через порт XXXX и получить через порт YYYY с одним сокетом? Если нет, то специфичны ли сокеты для комбинаций хост/порт?
Спасибо за понимание!
Ответ 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)