Получение 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 или другой анализатор пакетов, чтобы убедиться, что пакеты действительно достигают машины.