Получение UDP на XP против Win7

Я использую простой код Receiver UDP, встроенный в C++. Я обновляю свои машины до Windows 7, и теперь эта строка задерживается, потому что поток UDP не доходит до запуска исполняемого файла:

  iResult = recv(sock, RxBuf, buffsize, 0);

Функция recv просто удерживается. Я использовал wire shark, чтобы убедиться, что поток UDP активен и корректен, но не знаю, в чем проблема.

Любая помощь будет оценена.

(поток UDP транслируется)

1 ответ

Если вы не установили sock неблокирующим, recv() будет блокироваться, пока данные не будут получены. Так что, если программа там блокируется, вероятно, потому что она не получает дейтаграмм.

Многое изменилось в сети Windows между XP и 7, так что вот что нужно проверить:

  • Проверьте свои bind() заявление. Убедитесь, что вы действительно связываете порт, который вы думаете, и что вы проверяете на наличие ошибок.

  • Простое отключение брандмауэра в Windows не полностью отключает его. Есть много компонентов, особенно в Vista и более поздних версиях, которые активны все время.

  • При первом запуске исполняемого файла Windows Vista и более поздние версии попросят вас подтвердить, что он должен иметь доступ к сети. Если щелкнуть что-либо, кроме "Разрешить", путь к этому исполняемому файлу может быть заблокирован навсегда. Добавление правила "Разрешить" не отменяет этот блок. Чтобы разблокировать его, необходимо снова включить брандмауэр и перейти к "Брандмауэр Windows в режиме повышенной безопасности", чтобы удалить нарушающие правила как из входящих, так и из исходящих. Вы можете быть удивлены тем, что может там накапливаться.

  • Возможно, вам нужно добавить правило входящего брандмауэра для порта UDP, который вы слушаете. Даже если брандмауэр выключен.

  • Другие вещи, которые нужно попробовать: отключить любое антивирусное программное обеспечение, запустить прослушиватель с правами администратора, получить Wireshark или другой анализатор пакетов, чтобы убедиться, что пакеты действительно достигают машины.

Другие вопросы по тегам