C ++ UDP RecvFrom, SendTo Разные сокеты

я написал многопоточный сервер UDP по следующей схеме:

Схема:
1 приемная резьба
(Несколько рабочих потоков, каждый из которых имеет собственный сокет, а не bindend, только что созданный Ipv4, UDP, Datagram)
Сообщение передается одному рабочему, который затем обрабатывает его, а затем отправляет ответ со своим собственным сокетом.

Проблема:
Это прекрасно работает на всех моих собственных тестовых программах, но по какой-то странной причине не работает со старым программным обеспечением для того, что я эмулирую на сервере. Программное обеспечение использует асинхронный Wsa (перекрытие), но я до сих пор не понимаю, почему он не работает.

Путаница:
Это работает, если я использую тот же сокет для отправки, что и для получения данных на стороне сервера. Я не понимаю, почему, UDP является протоколом без установления соединения, так как он может обнаружить другой сокет?

0

Решение

Путаница: это работает, если я использую тот же сокет для отправки, как я использовал для
получение данных на стороне сервера. Я не понимаю, почему, УДП является
протокол без установления соединения, так как он может обнаружить другой сокет?

Если вы посмотрите заголовки UDP отправляемых вами пакетов, вы заметите, что они содержат поле «UDP Source Port». Это поле может быть проверено получателем пакета (через recvfrom ()), чтобы выяснить, какой UDP-порт отправляющий UDP-сокет используется на отправляющем компьютере (обратите внимание, что это отличается от поля «UDP Destination Port», которое определяет, какой порт пакет должен быть доставлен на принимающую машину). Возможно, что в вашем случае программа, с которой вы общаетесь, просматривает это поле и корректирует свое поведение в зависимости от значения этого поля.

Если вам интересно, на что будет установлено это поле, если вы никогда не вызывали bind () на отправляющем UDP-сокете, ответ заключается в том, что ОС выберет номер порта UDP для отправки (по сути, неявный bind ()).

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector