当前位置: 首页 > news >正文

unity socket udp 连接

使用此方法有助于udp在局域网内稳定的连接运行,已经过验证,为了保持彻底的稳定,可以考虑加入ping-pang进行网络处理,如果为了安全,请使用加密TCP

如果您要在大规,大项目的游戏中使用网络技术,建议您使用:mirror,请仔细阅读下代码再进行修改,它的网络构成比较完善,但可能不太适合您的项目,仅供参考

mirror 使用比较完善的kcp技术,如果您想要了解kcp请进行网络搜索,非常建议您访问:github进行学习

 

public class NetSever : GloabManager
{private static NetSever _instance;public static NetSever Instance{get{if (_instance == null)_instance = new NetSever();return _instance;}}public int connectPort;//private Socket socket;private EndPoint clientEnd;private Thread connectThread;public string hostIp = null;public Action UI_OutlinemodeData_GameOver;public Text YuYinShiBie;public Text IP;public bool capture;public bool ColorData = false;public int PlayID;public Queue LogQueue = new Queue();UdpClient udpClient;IPEndPoint ipEnd;public override void Start(){base.Start();//初始化协议if (GetIP() == ""){Debug.LogError("当前IP地址不存在,或没有信号进行连接!");return;}udpClient = new UdpClient();udpClient.EnableBroadcast = true;connectPort = 6000;开启一个线程connectThread = new Thread(new ThreadStart(SocketReceive));Thread.Sleep(1000);connectThread.Start();//SendAllStart("Start+90");}public override void Update(){base.Update();SendMessanger();}string GetIP(){//本机名 string hostName = Dns.GetHostName();//会返回所有地址,包括IPv4和IPv6IPAddress[] addressList = Dns.GetHostAddresses(hostName);foreach (IPAddress ip in addressList){if (ip.AddressFamily == AddressFamily.InterNetwork){return ip.ToString();}}return "127.0.0.1";}void SocketReceive(){UdpClient udpClient = new UdpClient(connectPort);try{Debug.Log("Listening for port " + connectPort + ":" + GetIP());IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);while (true){byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);string recvStr = Encoding.UTF8.GetString(recvData);LogQueue.Enqueue(recvStr);Debug.LogError(recvStr);}}catch (Exception){throw;}finally{udpClient.Close();}}void SendMessanger(){if (LogQueue.Count <= 0) return;string strArray = LogQueue.Dequeue() as string;//注意:此处向下处理数据,请结合项目实际if (strArray.Contains("+")){var _str = strArray.Split('+');if (_str[0] != string.Empty){switch (_str[0]){}}}else{Debug.LogError("收到的信息不正确");}}public void SendAllStart(string content){byte[] bytes = Encoding.UTF8.GetBytes(content);udpClient.Send(bytes, bytes.Length, new IPEndPoint(IPAddress.Broadcast, connectPort));}
}

http://www.lryc.cn/news/340135.html

相关文章:

  • 【ensp】VLAN间通信的解决办法
  • 接口测试框架搭建D22
  • CASA模型教程
  • 算法思路-遥感语义分割与变化检测
  • 动态规划专练( 231.打家劫舍Ⅱ)
  • K-means和逻辑回归
  • 3.2 iHRM人力资源 - 组织架构 - 编辑及删除
  • 支付系统核心逻辑 — — 状态机(JavaGolang版本)
  • rest_framework_mongoengine实现后端的增删改查
  • 【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图
  • 高光谱图像修复笔记
  • GPS定位原理及应用分析
  • Java面试篇9——并发编程
  • [RK3399 Linux] 使用busybox 1.36.1制作rootfs
  • JavaScript入门--循环
  • 【Delphi 爬虫库 1】GET和POST方法
  • [leetcode] 快乐数 E
  • Lobe UI - 基于 AntDesign 开发的 AIGC Web 应用的开源 UI 组件库
  • Java常用类 -- Random类
  • Docker安装Kong网关
  • spispispi
  • MySQL——创建和插入
  • 【BUG】element-ui表格中使用video标签,数据翻页,video中的视频仍然显示第一页的视频,没有重新加载
  • 【JavaSE】你真的了解内部类吗?
  • Vue3(二):报错调试,vue3响应式原理、computed和watch,ref,props,接口
  • 前端console用法分享
  • Matlab|电价型负荷需求响应(考虑电价变化)
  • PySide QWebChannel实现Python与JS双向通信的前后端分离桌面应用
  • 清明三天,用Python赚了4万?
  • 【C/C++笔试练习】read函数、虚拟存储、用户态、线程特点、缺页处理、调度算法、进程优先级、锁的使用、创建进程、不用加减乘除做加法、三角形