Пример #1
0
        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.");
        }
Пример #2
0
        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}");
                }
            }
        }