c# socket udp廣播


一、廣播消息

  由於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中建立服務器后,客戶端可以收到服務器消息從而進行連接。

二、服務端

開啟線程不斷廣播自己ip地址等信息,等待客戶端接收

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Net;
 6 using System.Net.Sockets;
 7 using System.Threading;
 8 using System.Threading.Tasks;
 9 
10 namespace scoket_udp_服務器
11 {
12     class Program
13     {
14         private static Socket sock;
15         private static IPEndPoint iep1;
16         private static byte[] data;
17         static void Main(string[] args)
18         {
19             sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
20             ProtocolType.Udp);
21             //255.255.255.255
22             iep1 =
23             new IPEndPoint(IPAddress.Broadcast, 9050);
24 
25             string hostname = Dns.GetHostName();
26             data = Encoding.ASCII.GetBytes(hostname);
27 
28             sock.SetSocketOption(SocketOptionLevel.Socket,
29             SocketOptionName.Broadcast, 1);
30 
31             Thread t = new Thread(BroadcastMessage);
32             t.Start();
33             //sock.Close();
34 
35             Console.ReadKey();
36 
37         }
38 
39         private static void BroadcastMessage()
40         {
41             while (true)
42             {
43                 sock.SendTo(data, iep1);
44                 Thread.Sleep(2000);
45             }
46             
47         }
48 
49     }
50 }

三、客戶端

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Net;
 6 using System.Net.Sockets;
 7 using System.Threading.Tasks;
 8 
 9 namespace socket客戶端udp
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             Socket sock = new Socket(AddressFamily.InterNetwork,
16             SocketType.Dgram, ProtocolType.Udp);
17             IPEndPoint iep =
18             new IPEndPoint(IPAddress.Any, 9050);
19             sock.Bind(iep);
20             EndPoint ep = (EndPoint)iep;
21             Console.WriteLine("Ready to receive…");
22 
23             byte[] data = new byte[1024];
24             int recv = sock.ReceiveFrom(data, ref ep);
25             string stringData = Encoding.ASCII.GetString(data, 0, recv);
26 
27             Console.WriteLine("received: {0} from: {1}",
28             stringData, ep.ToString());           
29             sock.Close();
30 
31             Console.ReadKey();
32         }
33     }
34 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM