• 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 }
  • 相关阅读:
    asp.net 框架接触(2)
    解决:C++ 中 main函数 wmain函数 _tmain函数 WinMain函数 wWInMain函数 _tWinMain函数的区别
    实现:创建/复制/移动文件API
    实现:类模板的数组类封装
    python3 解析shodan_json数据
    实现:API实现创建用户并且添加至管理员
    学习:类模板
    网展cms后台任意文件删除和sql注入
    选择排序
    实现:函数模板实现不同数据类型数组进行排序
  • 原文地址:https://www.cnblogs.com/csymaet/p/10004123.html
Copyright © 2020-2023  润新知