没有系统的学习过网络,想做联机游戏还真是费劲,想做在局域网内实现自动搜索服务器的功能,然后就想到了使用UDP进行广播,把服务器的信息广播给每一个玩家。

     Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
int udpPort = ;
bool isRun = false; string broadcastMessage = "房间号|||房间名|||总人数|||人数"; // 要广播的内容 public void CreateRoom()
{
udpSocket.EnableBroadcast = true; // 权限
Thread thread_Broadcast = new Thread(Broadcast);
thread_Broadcast.Start(); // 启动线程进行广播
}
private void Broadcast()
{
IPAddress[] ipAddressArr = Dns.GetHostAddresses(Dns.GetHostName()); // 得到本机所有的IP地址
List<string> ipPrefixList = new List<string>(); // IP地址前三个部分相同则说明处于同一局域网,所以把所有IP的前三部分存起来,放一个list中
foreach (var item in ipAddressArr)
{
if(item.AddressFamily == AddressFamily.InterNetwork) // 判断是不是IPV4
{
string ipPrefix = item.ToString();
int endPointIndex = ipPrefix.LastIndexOf('.'); // 得到最后一个点的位置
ipPrefix = ipPrefix.Remove(endPointIndex + ); // 移除IP的第四部分
ipPrefixList.Add(ipPrefix);
}
}
while (isRun) // 不太清楚为什么不管把线程设置成前台线程还是后台线程,在unity编辑里结束游戏的时候,线程都不结束,所以这里使用标志变量来结束
{
foreach (var item in ipPrefixList)
{
broadcastMessage = string.Format("{0}|||{1}|||{2}|||{3}", ,"房间1",,); // 格式为"房间号|||房间名|||总人数|||人数"(接收的时候使用string.split解析)
byte[] message = Encoding.UTF8.GetBytes(broadcastMessage);
udpSocket.SendTo(message, new IPEndPoint(IPAddress.Parse(item+""),udpPort));// 255表示广播地址
}
Thread.Sleep(); // 每一秒广播一次
}
private void OnApplicationQuit()
{
udpSocket.Close();
isRun = false;
}
}

最新文章

  1. 解决mysql卸载后无法从新安装,卡在最后一步的问题
  2. tomcat之Session的管理
  3. sql 日期格式汇总
  4. Sublime Text 3编辑器安装
  5. cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用
  6. PHP超大文件下载,断点续传下载
  7. aps.net 用ajax 读取服务端值
  8. 关于 diff 和patch
  9. Linux 下SVN报错No repository found in &#39;svn://210.16.191.230/huandong_project&#39;
  10. 日志框架elk 搭建
  11. Java执行js代码
  12. 02-01 Java关键字、标识符、注释、常量和进制问题、变量和数据类型
  13. Unity Shader 设置纹理采样tex2D过滤方式
  14. linux系统socket通信编程2
  15. hook Extending the Framework Core
  16. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等
  17. It企业的上市与退市
  18. 美团HD(7)-添加取消搜索按钮
  19. 【Android学习】Merge 优化布局
  20. POJ 1703 Find them, Catch them 并查集的应用

热门文章

  1. Result工具类
  2. Spring Boot中使用EhCache实现缓存支持
  3. Hive学习之路 (七)Hive的DDL操作
  4. Day3 分支结构和循环结构
  5. C++ - 模板(template)中typename的使用方法
  6. centos下安装myrocksdb
  7. Win10 安装 MongoDB 3.6.5 失败的问题
  8. springboot快速入门(五)——事务管理
  9. Ajax第一天——入门与基本概念
  10. 20155237 2016-2017-2 《Java程序设计》第1周学习总结