Может ли UDP (одноадресный клиент) recvfrom () использовать другие серверы, кроме одного sendto ()? - PullRequest
1 голос
/ 15 июня 2009

Я создаю клиент сокета UDP в C (одноадресная передача) и задаюсь вопросом, почему recvfrom () имеет аргумент struct sockaddr *, в котором на странице руководства написано Пустой указатель или указывает на структуру sockaddr, в которой должен быть сохранен адрес отправки.

Возможно ли, что я мог получить сообщение с другого сервера, отличного от того, который я отправляю? Если да, то как создать этот сценарий?

Если нет, правильно ли говорить, что этот аргумент полезен только при использовании режима вещания?

Ответы [ 3 ]

2 голосов
/ 15 июня 2009

Да, это вполне возможно. Причина этого заключается в том, что UDP не основан на потоке, а основан на пакетах. Каждый пакет обрабатывается без какой-либо истории (другие пакеты отправлены или получены).

По этой причине вы также можете открыть порт UDP и затем отправлять с него пакеты на другие хосты. Однако я не помню, насколько хорошо это поддерживается API.

0 голосов
/ 16 июня 2009

UDP-сокет будет recvfrom() любым хостом, отправляющим на этот порт правильный порт, если вы явно не connect(), в этом случае вы можете просто write() и read() и получать ошибки при получении ICMP-сообщений.

0 голосов
/ 15 июня 2009

Учитывая, что у вас всегда есть две стороны в UDP, кажется довольно очевидным, что кто-то должен сначала выполнить recvfrom ().

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