Не удается отключить многоадресную петлю на UdpClient - PullRequest
2 голосов
/ 10 января 2012

Я отправляю направленные широковещательные пакеты от UdpClient.

Я также прослушиваю целевой порт на втором UdpClient (в том же приложении).

Я не хочу видетьпакеты, созданные мной, поэтому я подумал, что это просто установка MulticastLoopback в false, но это не работает.Я все еще вижу свои собственные пакеты.

 private readonly IPAddress BroadcastAddress = IPAddress.Parse("169.254.255.255");
 private const int Port = 0x88a4;

 private UdpClient _udpSend, _udpReceive;

 private void InitUdp()
 {
     _udpSend = new UdpClient();
     _udpSend.EnableBroadcast = true;
     _udpSend.MulticastLoopback = false;
     _udpSend.Connect(BroadcastAddress, Port);

     _udpReceive = new UdpClient(new IPEndPoint(IPAddress.Any, Port));
     _udpReceive.MulticastLoopback = false;
     _udpReceive.BeginReceive(OnUdpPacket, null);           
 }

Любые идеи кто-нибудь?

Могу ли я добиться этого с помощью UdpClient или мне нужно вместо этого вернуться к необработанным сокетам?

РЕДАКТИРОВАТЬ:

Я пробовалиспользуя один экземпляр UdpClient для отправки и получения, но теперь я никогда не получаю никаких данных, независимо от настройки MulticastLoopback!

Я пытался прослушивать как IPAddress.Any, так и мой локальный IP, но я никогда не вижулюбые пакеты.

 private readonly IPAddress BroadcastAddress = IPAddress.Parse("169.254.255.255");
 private const int Port = 0x88a4;

 private UdpClient _udpClient;

 private void InitUdp()
 {
     _udpClient= new UdpClient(new IPEndPoint(IPAddress.Any, Port));
     _udpClient.Connect(BroadcastAddress, Port);
     _udpClient.BeginReceive(OnUdpPacket, null);           
 }
...