发布时间:2019-12-06编辑:佚名阅读(5546)
由于Tcp是有连接的,所以不能用来发送广播消息。发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息。广播消息的目的IP地址是一种特殊IP地址,称为广播地址。广播地址由IP地址网络前缀加上全1主机后缀组成,如:192.168.1.255是192.169.1.0这个网络的广播地址;130.168.255.255是130.168.0.0这个网络的广播地址。向全部为1的IP地址(255.255.255.255)发送消息的话,那么理论上全世界所有的联网的计算机都能收得到了。但实际上不是这样的,一般路由器上设置抛弃这样的包,只在本地网内广播,所以效果和向本地网的广播地址发送消息是一样的。
利用udp广播可以实现像cs中建立服务器后,客户端可以收到服务器消息从而进行连接。
void MainWindow_Loaded(object sender, RoutedEventArgs e) { Loaded -= MainWindow_Loaded; UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 0)); IPEndPoint endpoint = new IPEndPoint(IPAddress.Broadcast, 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(); }
void MainWindow_Loaded(object sender, RoutedEventArgs e) { Loaded -= MainWindow_Loaded; UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 7788));//端口要与发送端相同 Thread thread = new Thread(receiveUdpMsg);//用线程接收,避免UI卡住 thread.IsBackground = true; thread.Start(client); } void receiveUdpMsg(object obj) { UdpClient client = obj as UdpClient; IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0); while (true) { client.BeginReceive(delegate(IAsyncResult result) { Console.WriteLine(result.AsyncState.ToString());//委托接收消息 }, Encoding.UTF8.GetString(client.Receive(ref endpoint))); } }
关键字: C# UdpClient 发送 接收 udp 广播包
上一篇:滚动鼠标音响有吱吱的杂音
2人
0人
0人
0人