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

c#一个udp代码

不使用socket进行

unity下的

private Thread connectThread;private UdpClient udpClient;public Queue LogQueue = new Queue();public static UDPManager Instance{get;private set;}private void Awake(){Instance = this;}private void Start(){udpClient = new UdpClient();udpClient.EnableBroadcast = true;connectThread = new Thread(new ThreadStart(SocketReceive));Thread.Sleep(1000);connectThread.Start();}private void Update(){SendMessanger();}void SocketReceive(){UdpClient udpClient = new UdpClient(6900);try{while (true){IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);while (true){byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);string recvStr = Encoding.UTF8.GetString(recvData);LogQueue.Enqueue(recvStr);}}}catch (Exception){throw;}finally{udpClient.Close();}}void SendMessanger(){if (LogQueue.Count <= 0) return;string strArray = LogQueue.Dequeue() as string;if (strArray!=null){Debug.Log(strArray);}}public void SendAllStart(string content){byte[] bytes = Encoding.UTF8.GetBytes(content);udpClient.Send(bytes, bytes.Length, new IPEndPoint(IPAddress.Loopback, 6910));}

c#其他下使用:

public partial class NetSever
{private static NetSever instance;public static NetSever Instance{get{if (instance == null){instance = new NetSever();}return instance;}}static UdpClient udpClient;static int connectPort;public static Queue LogQueue = new Queue();static IPAddress remoteIP = IPAddress.Parse("127.0.0.1");IPEndPoint remotePoint = new IPEndPoint(remoteIP, connectPort);//实例化一个远程端点//网络端口唤醒public void Init(){//初始化协议if (GetIP() == ""){Console.WriteLine ("当前IP地址不存在,或没有信号进行连接!");return;}udpClient = new UdpClient();udpClient.EnableBroadcast = true;connectPort = 6900;//添加事件订阅信息AddEventNeight();开启一个线程Task task = new Task(SocketReceive);task.Start();}private void AddEventNeight(){}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";}static void SocketReceive(){UdpClient client = null;string receiveString = null;//实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(ref remotePoint)时会将该端点改成真正发送端端点IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);//NetSever.Instance.SendAllStart("网络开启");UdpClient udpClient = new UdpClient(6910);try{while (true){IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);while (true){byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);receiveString = Encoding.UTF8.GetString(recvData);string[] date = null;if (receiveString.Contains("\r\n")){receiveString = receiveString.TrimEnd((char[])"\r\n".ToCharArray());}if (receiveString.Contains("010")){date = receiveString.Split('-');receiveString = "010";}if (receiveString.Contains("openFile")){date = receiveString.Split('-');receiveString = "openFile";}switch (receiveString){case "Text":Console.WriteLine("网络端口测试!!!已收到信息");NetSever.Instance.SendAllStart("网络已打开");break;}}}}catch (Exception){//NetSever.Instance.SendAllStart("网络已打开");throw;}finally{udpClient.Close();}}//发送端口public void SendAllStart(string content){byte[] bytes = Encoding.UTF8.GetBytes(content);UdpClient udpClient = new UdpClient();try{udpClient.Connect("127.0.0.1", 6900);udpClient.Send(bytes, bytes.Length);}catch (Exception ex){Console.WriteLine(ex.ToString());}}

至于为啥这么写,只能说经验之谈

相关文章:

  • asyncua模块中OPC UA的ua.Variant如何表示字典?
  • 四十八、openlayers地图调色总结——锐化、模糊、浮雕滤镜,调整地图色相、饱和度、亮度
  • 之所以选择天津工业大学,因为它是双一流、报考难度适宜,性价比高!天津工业大学计算机考研考情分析!
  • Java基础 - 练习(三)打印空心菱形
  • 超详细的selenium使用指南
  • 驾校在线考试系统源码 手机+PC+平板自适应
  • 了解指标体系1:指标是大数据开发中的关键要素
  • linux系统中,pwd获取当前路径,dirname获取上一层路径;不使用 ../获取上一层路径
  • 连接Huggingface报requests.exceptions.SSLError错误
  • 数据库-连接查询-连接查询
  • 【Java】图的初识
  • MYSQL in和exists
  • Spark日志有哪些?
  • 【接口自动化测试】第二节.Requests库和接口对象封装
  • 异构集成封装类型2D、2.1D、2.3D、2.5D和3D封装技术
  • Google 是如何开发 Web 框架的
  • 自己简单写的 事件订阅机制
  • Kibana配置logstash,报表一体化
  • mysql常用命令汇总
  • oschina
  • SAP云平台里Global Account和Sub Account的关系
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 阿里云应用高可用服务公测发布
  • 从重复到重用
  • 分类模型——Logistics Regression
  • 工作中总结前端开发流程--vue项目
  • 每天一个设计模式之命令模式
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 因为阿里,他们成了“杭漂”
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • # 达梦数据库知识点
  • ## 基础知识
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • ${ }的特别功能
  • (2)leetcode 234.回文链表 141.环形链表
  • (30)数组元素和与数字和的绝对差
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET6 命令行启动及发布单个Exe文件
  • .net开发日常笔记(持续更新)
  • .NET框架
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [20171106]配置客户端连接注意.txt