public async Task DiscoveryAsync(CancellationToken ct, IPAddress interfaceAddress) { IPEndPoint interfaceEndpoint = new IPEndPoint(interfaceAddress, 2048); var udpClient = new BroadcastUdpClient(interfaceEndpoint); //udpClient.EnableBroadcast = true; await udpClient.SendAsync(_Datagram, _Datagram.Length, _EP2); udpClient.EnableBroadcast = false; ct.Register(() => udpClient.Close()); HashSet <ulong> packetHash = new HashSet <ulong>(); while (!ct.IsCancellationRequested) { UdpReceiveResult receiveResult; try { receiveResult = await udpClient.ReceiveAsync(); } catch (ObjectDisposedException) { break; } DiscoveryPacket dpack = new DiscoveryPacket(receiveResult.Buffer); Device device = dpack.DecodePacket(); Boolean result = packetHash.Add(Utils.CalculateHash(receiveResult.Buffer)); if (result) { OnDeviceDiscovered(device); } } udpClient.Close(); packetHash.Clear(); }
public async Task DiscoveryAsync(CancellationToken ct) { var udpClient = new UdpClient(_EP1); udpClient.EnableBroadcast = true; await udpClient.SendAsync(_Datagram, _Datagram.Length, _EP2); udpClient.EnableBroadcast = false; ct.Register(() => udpClient.Close()); while (!ct.IsCancellationRequested) { UdpReceiveResult receiveResult; try { receiveResult = await udpClient.ReceiveAsync(); } catch (ObjectDisposedException) { break; } DiscoveryPacket dpack = new DiscoveryPacket(receiveResult.Buffer); Device device = dpack.DecodePacket(); Boolean result = _PacketHash.Add(Utils.CalculateHash(receiveResult.Buffer)); if (result) { OnDeviceDiscovered(device); } } udpClient.Close(); _PacketHash.Clear(); }