没有系统的学习过网络,想做联机游戏还真是费劲,想做在局域网内实现自动搜索服务器的功能,然后就想到了使用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;
}
}

Unity中使用C#实现UDP广播的更多相关文章

  1. Unity中接收服务器消息并广播事件的实现

    最近接触的项目,是一个棋牌游戏,棋牌游戏需要在前端进行一些操作,然后向服务器发送数据包,在服务器接收到客户端的数据后,会在服务端进行一系列的判断之后,然后发送给客户端一个返回数据,客户端接收到这个返回 ...

  2. Netty实战十三之使用UDP广播事件

    1.UDP的基础知识 我们将会把重点放在一个无连接协议即用户数据报协议(UDP)上,它通常用在性能至关重要并且能够容忍一定的数据报丢失的情况下. 面向连接的传输(如TCP)管理了两个网络端点之间的连接 ...

  3. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...

  4. NetworkComms V3 之发送UDP广播消息

    NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3目前只支持基本的U ...

  5. UDP广播问题

    http://bbs.csdn.net/topics/390218123 Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址.在使用TCP/IP 协议的网 ...

  6. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

    转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...

  7. c# socket udp广播

    一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...

  8. 通过UDP广播实现Android局域网Peer Discovering

    本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...

  9. 【Netty】UDP广播事件

    一.前言 前面学习了WebSocket协议,并且通过示例讲解了WebSocket的具体使用,接着学习如何使用无连接的UDP来广播事件. 二.UDP广播事件 2.1 UDP基础 面向连接的TCP协议管理 ...

随机推荐

  1. 用Python爬虫爬取炉石原画卡牌图片

    前段时间看了点Python的语法以及制作爬虫常用的类库,于是动手制作了一个爬虫尝试爬取一些炉石原画图片.本文仅记录对特定目标网站的分析过程和爬虫代码的编写过程.代码功能很局限,无通用性,仅作为一个一般 ...

  2. spring中MessageSource的配置使用方法1[转]

    本文转载仅供自己学习收录,不做任何商业用途,如有需要请访问文章原地址:http://blog.csdn.net/qyf_5445/article/details/8124306 Spring定义了访问 ...

  3. BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Se ...

  4. 4-4 R语言函数 tapply

    #对向量的子集进行操作 #tapply(参数):tapply(向量,因子/因子列表,函数/函数名) > x <- c(rnorm(5),runif(5),rnorm(5,1)) > ...

  5. Spring Boot Mock单元测试学习总结

    单元测试的方法有很多种,比如使用Postman.SoapUI等工具测试,当然,这里的测试,主要使用的是基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从 ...

  6. ## 20145203盖泽双 《Java程序设计》第二周学习总结

    20145203盖泽双 <Java程序设计>第二周学习总结 教材学习内容总结 1.java可以分为基本类型和类类型,基本类型包括整数.字节.浮点数.字符与布尔. 整数:short(占两个字 ...

  7. h5py

    解决办法: sudo apt-get install libhdf5-dev sudo apt-get install python-h5py

  8. js之点击值发生变化

    点击值发生变化,应用场景,比如像阿里云那样我通常密码是以******的形式存在,我必须要点击查看,它才会以明文显示. 在实际开发中,比如以智能门锁为例,安装门锁时,有个叫密码输入框的表单,这个是选填项 ...

  9. jquery mobile mobiscroll 日期插件使 用mobiscroll

    官网网站: http://www.mobiscroll.com/ http://code.google.com/p/mobiscroll/ 1.精简版Demo: 查看Demo » 下载Demo » 2 ...

  10. 关于C#的静态类和静态构造函数

    静态构造函数是C#的一个新特性,其实好像很少用到.不过当我们想初始化一些静态变量的时候就需要用到它了.这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次.也就是在创建第一个 ...