Ejemplo n.º 1
0
        public void Scan()
        {
            var receiveSocket =
                new UdpClient(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //初始化一个Scoket协议

            var receiveIep = new IPEndPoint(IPAddress.Any, 9127); //初始化一个侦听局域网内部所有IP和指定端口

            EndPoint receiveEp = receiveIep;

            receiveSocket.Bind(receiveIep); //绑定这个实例

            while (true)
            {
                var receiveBuffer = new byte[1024]; //设置缓冲数据流

                receiveSocket.ReceiveFrom(receiveBuffer, ref receiveEp); //接收数据,并确把数据设置到缓冲流里面

                Console.WriteLine(Encoding.Unicode.GetString(receiveBuffer).TrimEnd('\0') + " " +
                                  DateTime.Now.ToString(CultureInfo.InvariantCulture));
                break;
            }

            UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 0));
            IPEndPoint endpoint =
                new IPEndPoint(IPAddress.Parse("255.255.255.255"), 7788); //默认向全世界所有主机发送即可,路由器自动给你过滤,只发给局域网主机
            String ip = "host:" + Dns.GetHostEntry(Dns.GetHostName()).AddressList.Last().ToString(); //对外广播本机的ip地址
            byte[] ipByte = Encoding.UTF8.GetBytes(ip);
            DispatcherTimer dt = new DispatcherTimer
            {
                Interval = TimeSpan.FromSeconds(1)
            }; //每隔1秒对外发送一次广播
            dt.Tick += delegate { client.Send(ipByte, ipByte.Length, endpoint); };
            dt.Start();
        }