public void ScanHost() { foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) { if (!adapter.OperationalStatus.Equals(OperationalStatus.Up)) { continue; } foreach (UnicastIPAddressInformation unicastIPInfo in adapter.GetIPProperties().UnicastAddresses) { if (unicastIPInfo.Address.AddressFamily == AddressFamily.InterNetwork) { string localAddress = unicastIPInfo.Address.ToString(); if (!LocalFullAddresses.Contains(localAddress)) { LocalFullAddresses.Add(localAddress); } string broadcastAddress = GetBroadcastAddress(unicastIPInfo); if (BroadcastAddresses.Contains(broadcastAddress)) { continue; } Output.WriteLine($"Local machine ip address: {unicastIPInfo.Address}, {unicastIPInfo.IPv4Mask}, broadCast address: {broadcastAddress}"); BroadcastAddresses.Add(broadcastAddress); } } } Output.WriteLine("Finished searching local network addresses."); }
private void AsyncCallbackBroadcastSocket(IAsyncResult result) { if (BroadcastClientSocket != null) { try { int size = BroadcastClientSocket.EndReceiveFrom(result, ref BroadcastRemoteEndPoint); string address = BroadcastRemoteEndPoint.ToString().Split(':')[0]; if (!ServerAddresses.Contains(address) && !LocalFullAddresses.Contains(address)) { Output.WriteLine($"Got a server address: {address}"); AddNewClient(address); } //Have to keep listening on the same BroadCast socket, due to other broadcast addresses may reply BroadcastClientSocket.BeginReceiveFrom(new byte[1024], 0, 1024, SocketFlags.None, ref BroadcastRemoteEndPoint, new AsyncCallback(AsyncCallbackBroadcastSocket), null); } catch (Exception exception) { Output.WriteLine($"Error in AsyncCallback of Broadcast socket:\n{exception}"); } } }