
Unity UDP通讯
发布日期:2021-05-08 13:41:42
浏览次数:27
分类:原创文章
本文共 2926 字,大约阅读时间需要 9 分钟。
UDPSend:发送端脚本,Ip为接收端本地Ip, port为自定义int类型(但是要与接收端port一致)
UDPReceive:接收端脚本,port为自定义int类型(但是要与发送端port一致)
using UnityEngine;using System.Net;using System.Net.Sockets;using System.Text;public class UDPSend : MonoBehaviour{ private string ip; //主机ip地址 private int port; private IPAddress ipAddress; private IPEndPoint endPoint; private Socket socket; private EndPoint server; private byte[] sendData; //发送内容,转化为byte字节 void Awake() { ip = "192.168.1.100"; port = 8899; } //发送函数 public void Send(float value) //参数不是字符串时转化为string { string msg = value.ToString("0"); //传递的值转化为string ipAddress = IPAddress.Parse(ip); //ip地址 endPoint = new IPEndPoint(ipAddress, port); //自定义端口号 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 112); server = (EndPoint)sender; sendData = new byte[1024]; //定义发送字节大小 sendData = Encoding.Default.GetBytes(msg); //对msg编码 socket.SendTo(sendData, sendData.Length, SocketFlags.None, endPoint); //发送信息 } void Update() { if (Input.GetKeyDown(KeyCode.A)) { Send(12); } }}
using UnityEngine;using System.Net;using System.Net.Sockets;using System.Threading;using System.Text;public class UDPReceive : MonoBehaviour{ private IPEndPoint ipEndPoint; private Socket socket; private Thread thread; private byte[] bytes; //接收到的字节 private int bytesLength; //长度 public string receiveMsg = ""; //接收到的信息 public bool isOver; private int port; //端口号要与发送端一致 void Start() { Init(); } //初始化 private void Init() { ipEndPoint = new IPEndPoint(IPAddress.Any, port); socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.Bind(ipEndPoint); thread = new Thread(new ThreadStart(Receive)); //开启一个线程,接收发送端的消息 thread.IsBackground = true; thread.Start(); } //接收消息函数 private void Receive() { IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint remote = (EndPoint)sender; while (true) { bytes = new byte[1024]; bytesLength = socket.ReceiveFrom(bytes, ref remote); receiveMsg = Encoding.ASCII.GetString(bytes, 0, bytesLength); } } //实时接收消息 void Update() { if (receiveMsg != "") { Debug.Log(receiveMsg); receiveMsg = ""; } } //关闭socket,关闭thread private void OnDisable() { if (socket != null) { socket.Close(); } if (thread != null) { thread.Interrupt(); thread.Abort(); } }}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月02日 21时16分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
2019-03-06
Linux应用-线程操作
2019-03-06
多态体验,和探索爷爷类指针的多态性
2019-03-06
系统编程-进程间通信-无名管道
2019-03-06
记2020年初对SimpleGUI源码的阅读成果
2019-03-06
C语言实现面向对象方法学的GLib、GObject-初体验
2019-03-06
系统编程-进程-ps命令、进程调度、优先级翻转、进程状态
2019-03-06
为什么我觉得需要熟悉vim使用,难道仅仅是为了耍酷?
2019-03-06
一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan
2019-03-06
HDOJ2017_字符串统计
2019-03-06
高等软工第二次作业《需求分析阶段总结》
2019-03-06
404 Note Found 团队会议纪要
2019-03-06
CentOS安装Docker-ce并配置国内镜像
2019-03-06
使用JWT作为Spring Security OAuth2的token存储
2019-03-06
使用Redis作为Spring Security OAuth2的token存储
2019-03-06
【SOLVED】Linux使用sudo到出现输入密码提示延迟时间长
2019-03-06
项目引入非配置的文件,打成war包后测试报错的可能原因
2019-03-06
Git学习笔记
2019-03-06