Unity中使用C#實現UDP廣播


 沒有系統的學習過網絡,想做聯機游戲還真是費勁,想做在局域網內實現自動搜索服務器的功能,然后就想到了使用UDP進行廣播,把服務器的信息廣播給每一個玩家。

 1     Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
 2     int udpPort = 7799;
 3     bool isRun = false; 
 4  
 5     string broadcastMessage = "房間號|||房間名|||總人數|||人數";    // 要廣播的內容
 6  
 7     public void CreateRoom()
 8     {
 9         udpSocket.EnableBroadcast = true;    // 權限
10         Thread thread_Broadcast = new Thread(Broadcast);
11         thread_Broadcast.Start();  // 啟動線程進行廣播
12     }
13     private void Broadcast()
14     {
15     IPAddress[] ipAddressArr = Dns.GetHostAddresses(Dns.GetHostName());  // 得到本機所有的IP地址
16     List<string> ipPrefixList = new List<string>();   // IP地址前三個部分相同則說明處於同一局域網,所以把所有IP的前三部分存起來,放一個list中
17     foreach (var item in ipAddressArr)
18     {
19         if(item.AddressFamily == AddressFamily.InterNetwork)    // 判斷是不是IPV4
20         {
21             string ipPrefix = item.ToString();
22             int endPointIndex = ipPrefix.LastIndexOf('.');    // 得到最后一個點的位置
23             ipPrefix = ipPrefix.Remove(endPointIndex + 1);    // 移除IP的第四部分
24             ipPrefixList.Add(ipPrefix);
25     }
26     }
27     while (isRun)    // 不太清楚為什么不管把線程設置成前台線程還是后台線程,在unity編輯里結束游戲的時候,線程都不結束,所以這里使用標志變量來結束
28     {
29         foreach (var item in ipPrefixList)
30         {
31             broadcastMessage = string.Format("{0}|||{1}|||{2}|||{3}", 666,"房間1",8,0);    // 格式為"房間號|||房間名|||總人數|||人數"(接收的時候使用string.split解析)
32             byte[] message = Encoding.UTF8.GetBytes(broadcastMessage);
33             udpSocket.SendTo(message, new IPEndPoint(IPAddress.Parse(item+"255"),udpPort));// 255表示廣播地址
34         }
35         Thread.Sleep(1000);    // 每一秒廣播一次
36     }
37     private void OnApplicationQuit()
38     {
39         udpSocket.Close();
40         isRun = false;
41     }
42 }

 


免責聲明!

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



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