private void Broadcast() { UdpClient client = new UdpClient(); client.AllowNatTraversal(true); client.EnableBroadcast = true; while (!tokenSource.IsCancellationRequested) { CancellationTokenSource internalSource = new CancellationTokenSource(); IPEndPoint serverEndpoint = new IPEndPoint(IPAddress.Any, Port); byte[] data = new byte[] { 0x00 }; client.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, Port)); Task.Factory.StartNew(() => { client.Receive(ref serverEndpoint); messageReceived.Set(); } , internalSource.Token); if (messageReceived.WaitOne(PollingTime)) { ServerDiscoveredEventArgs args = new ServerDiscoveredEventArgs(serverEndpoint.Address.ToString(), new byte[] { 0x00 }); ServerDiscovered?.Invoke(this, args); } internalSource.Cancel(); } }
private void OnServerDiscoverd(object sender, ServerDiscoveredEventArgs args) { _discoveredServers.Add(args.ServerIp, args.DataQuantity); }