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 }

 

转载于:https://www.cnblogs.com/csymaet/p/10004123.html

你可能感兴趣的:(Unity中使用C#实现UDP广播)