2012-04-25 2 views
0

У меня есть простой UDP-сервер и клиент.recvfrom() возвращает порт отправителя как 0 (ноль)

Клиент создает сокет DGRAM, связывает его (явно) (даже через него не требуется), распечатывает порт, к которому он привязан к использованию getsockname() (не равен нулю), а затем отправляет сообщение (через sendto ()), который успешно доставлен.

Сервер получает сообщение с помощью recvfrom(). Сообщение получено правильно, но номер порта в отправителе равен нулю. ДЛЯ ПЕРВОГО ПОСЛЕДУЮЩЕГО ПОСЛАНИЯ (я использую ntohs()). Из второго сообщения номер порта отображается правильно (т. Е. Тот, который клиент показывает, что сокет привязан).

Любая идея?

ОБНОВЛЕНИЕ: проблема решена мной. См. Ответ ниже.

+0

На какой платформе вы работаете? – Sniggerfardimungus

+0

Решил проблему. Проблема обновлена. –

ответ

2

Я решил эту проблему. Предположим, что последний аргумент recvfrom() равен

socklen_t from_len;
, тогда перед вызовом recvfrom() вы должны установить
from_len = sizeof(struct sockaddr_in);
(для IPv4). Trivial, я знаю это, но иногда это может просто пропустить ваш ум :-)

Смежные вопросы