Просто столкнулся с той же проблемой и хотел рассказать, что исправило для меня.
Вкратце: похоже, что брандмауэр Windows каким-то образом был причиной такого странного поведения, и простое отключение службы не помогает. Вы должны явно разрешить входящие UDP-пакеты для конкретной программы (исполняемого файла) в списке входящих правил брандмауэра Windows.
Полное описание случая читайте далее.
Моя сетевая настройка: IP-адрес моей (принимающей) машины - 192.168.1.2, IP-адрес отправляющей машины - 192.168.1.50, а маска подсети на обеих машинах - 255.255.255.0. Моя машина работает под управлением Windows 7 x64.
Это код (примерно), который я использовал:
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
sock.Bind(iep);
sock.EnableBroadcast = true;
EndPoint ep = (EndPoint)iep;
byte[] buffer = new byte[1000];
sock.ReceiveFrom(buffer, ref ep);
Первоначально это не сработало, если я не отправил широковещательный пакет из этого сокета до того, как я позвоню на него ReceiveFrom
. Т.е. добавив эту строку перед ReceiveFrom
вызовом:
sock.SendTo(someData, new IPEndPoint(IPAddress.Broadcast, somePort))
Когда я не отправлял широковещательный пакет первым из принимающего сокета, входящие широковещательные пакеты не принимались им, даже если они появлялись в Wireshark (адресатом пакетов было 255.255.255.255).
Я подумал, что похоже, что брандмауэр возится с входящими пакетами (если только исходящим пакетом не открывается какое-то отверстие UDP - хотя я раньше не слышал, что пробивка отверстий UDP каким-то образом применяется к широковещательным пакетам), поэтому Я пошел в службы и вообще отключил службу брандмауэра Windows. Это ничего не изменило.
Однако, попробовав все остальное, я снова включил службу брандмауэра и снова попытался запустить программу. На этот раз появилось приглашение брандмауэра с вопросом, хочу ли я разрешить процесс MyProgram.vshost.exe (я отлаживал в Visual Studio) через брандмауэр, я принял его и вуаля - все сработало! Входящие пакеты сейчас принимались!
person
lxa
schedule
05.03.2014