服务端:
public class NetWorking : MonoBehaviour { // Use this for initialization void Start() { Screen.fullScreen = true; Debug.Log("networking start"); InitNet(); } Thread myThread; public void InitNet() { newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//接收端 sock = new Socket(AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp);//广播发送端 //255.255.255.255 sock.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast, 1); iep1 = new IPEndPoint(IPAddress.Broadcast, 8001); iep2 =new IPEndPoint(IPAddress.Any, 8002); newsock.Bind(iep2);//接收端必须绑定一下 myThread = new Thread(new ThreadStart(ReceiveSorkets)); myThread.IsBackground = true; myThread.Start(); } string json = null; IPEndPoint iep2; public void sendMess(string json) { json = Utils.EventHandleToJson("1", "2", "3", "4"); json = "1" + "|" + "2" + "|"+"plant" +"|"+ "3"; Debug.Log("json = " + json); byte[] data = Encoding.Default.GetBytes(json); byte[] utf8Data = Encoding.Convert(Encoding.Default, Encoding.UTF8, data); sock.SendTo(utf8Data, iep1); } IPEndPoint iep1; Socket sock; Socket newsock; private void ReceiveSorkets() { EndPoint point = (EndPoint)iep2; while (true) { byte[] data = new byte[1024]; //发送接受信息 int recv = newsock.ReceiveFrom(data, ref point); Debug.Log(Encoding.UTF8.GetString(data, 0, recv)); string json = Encoding.UTF8.GetString(data, 0, recv); if (UdpData != null) { UdpData(json); } } } public void sendSolvedMessage(string id, string gid, string objectType, string dealingState) { //string json = null; //json = Utils.EventHandleToJson(id, gid, objectType, dealingState); //byte[] data = new byte[1024]; //data = Encoding.Unicode.GetBytes(json); //newsock.SendTo(data, data.Length, SocketFlags.None, Remote); //son = Utils.EventHandleToJson("1", "2", "3", "4"); json = gid + "|" + id + "|" + objectType + "|" + dealingState; Debug.Log("json = " + json); byte[] data = Encoding.UTF8.GetBytes(json); byte[] utf8Data = Encoding.Convert(Encoding.Default, Encoding.UTF8, data); sock.SendTo(utf8Data, iep1); } //关闭Socket public void NetClosed() { // Debuger.LogError("NetClosed"); if (newsock != null) { newsock.Close(); newsock = null; } if (sock != null) { sock.Close(); sock = null; } } void OnDestroy() { NetClosed(); } }
客户端:
public class NetWorking : MonoBehaviour { public NetWorkingMsg netWrokingMsg; // Use this for initialization void Start() { InitNet(); } //本地socket Socket APPSocket; Socket SendSocket; //server目标 EndPoint ServerRemote; string input, stringData; IPEndPoint iep; public void InitNet() { ipep = new IPEndPoint(IPAddress.Parse("192.168.0.131"), 8001); //定义网络类型,数据连接类型和网络协议UDP APPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); iep = new IPEndPoint(IPAddress.Any, 8001); APPSocket.Bind(iep); SendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); isRun = true; myThread = new Thread(new ThreadStart(ReceiveSorket)); myThread.IsBackground = true; myThread.Start(); } Thread myThread; int recv; IPEndPoint remote; Pack pack = new Pack(); Int32 timeStamp; private bool isRun = false; //接收数据 //供UDP使用 start public IPAddress broadcast; public IPEndPoint ep; public UdpClient ReceiveUdpClient; private void ReceiveSorket() { EndPoint ep = (EndPoint)iep; while (isRun) { byte[] data = new byte[1024]; int recv = APPSocket.ReceiveFrom(data, ref ep); stringData = Encoding.UTF8.GetString(data); netWrokingMsg.receiveUdp(stringData); } } // 发送消息 public void SendUdp(string str) { IPEndPoint sender = new IPEndPoint( IPAddress.Parse(Constant.servicesIP), 8002); EndPoint Remote = (EndPoint)sender; Debug.Log("zdp senUDP 11111"); SendSocket.SendTo(Encoding.UTF8.GetBytes(str), Remote); } public void SendUdpBroadcast() { IPEndPoint sender = new IPEndPoint(IPAddress.Broadcast, 8001); EndPoint Remote = (EndPoint)sender; APPSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);//设置该scoket实例的发送形式 string request = "你好,TEST SEND!";//初始化需要发送而的发送数据 byte[] buffer = Encoding.Unicode.GetBytes(request); APPSocket.SendTo(buffer, Remote); } //关闭Socket public void NetClosed() { // Debuger.LogError("NetClosed"); if (APPSocket != null) { APPSocket.Close(); APPSocket = null; } if(SendSocket != null) { SendSocket.Close(); SendSocket = null; } isRun = false; } void OnDestroy() { NetClosed(); } }
相关推荐
Unity使用Udp协议进行Socket连接通讯
unity UDP通讯 包含心跳机制
基于Unity制作的UDP通信Demo,PC/Android平台亲测可用,直接打包可测
unity3d开发udp通信管理工具,无其他插件,只有一个脚本,直接挂载到物体上即可运行
可看资料:https://blog.csdn.net/a1062624730/article/details/132641467 根据网上提供的方法,测试出了最终解决方案,只要加一个sleep就可以,但是位置在前面,详情可看上方链接
在Unity3D中实现Http,Socket TCP、UDP,WebService,WebApi通讯方式
通过socket通讯实现服务器与客户端的连接。首先服务器利用udp广播发送自己的ip地址,客户端在收到广播后通过此ip以tcp连接的方式连接服务器来通讯。
外部文件用来配置udp内容,外部文件可以自主修改
unity客户端、服务单TCP、UDP通讯Demo
用unity3d实现的多人在线聊天通讯程序 包含服务器端(web程序),pc端客户端,Android客户端 支持多台手机,电脑在线聊天
通过多线程的方式实现了UDP收发数据 可以快速学习UDP通讯原理应进行实际应用
基于.net3.5,可用于Unity调用的基础类库:包括UDP网络通讯封装类,SerialPort串口通讯封装类,数据处理封装类,PID解算封装类,输出日志封装类等,便于操作运行
实现了位置无错位同步,UDP通讯。更改客户端指向服务端的IP地址位置在源代码的NetWorking.cs下 1、启动服务端,开启服务 2、点击登录游戏,可以分红和蓝两队,分别是左右两个颜色的开始游戏 3、如果电脑操作方向用...
整合了一些功能,包含unity软件延时启动 文件操作工具类 UDP协议通讯 软件时间锁 快捷方式自动创建开机自启 输出log日志到指定目录
实现了位置无错位同步,UDP通讯。更改客户端指向服务端的IP地址位置在源代码的NetWorking.cs下 1、启动服务端,开启服务 2、点击登录游戏,可以分红和蓝两队,分别是左右两个颜色的开始游戏 3、如果电脑操作方向用...
16 5.3 基于IOCP的Socket通讯 18 5.4 User对象的设计 19 5.4.1 玩家状态设计 19 5.4.2 玩家的属性以及手牌的操作方法 20 5.5 Table对象的设计 21 5.5.1 桌子状态设计 21 5.5.2 Table的属性及方法 21 5.6 粘包问题 23...
TCP与UDP都是网络SOCKET通信协议,其最大的区别在于UDP是一种不可靠的网络通讯服务,而TCP是一种可靠的网络通信服务。众所周知,TCP通过三次握手来实现网络通讯的,这一机制保证了校验数据,保证了可靠性;而UDP是...
c#语言写的udp通信,包含服务端.客户端,可以在本机电脑测试,也可以在多台电脑测试,没有任何问题.
基于ESP32CAM的图传勘探小车代码(含APP Inventor制作的APP上位机),小车版本为麦克纳姆轮底板型号,采用UDP网络通讯协议进行控制。项目代码具备一定的2次开发能力,可玩性和可移植性较强。积分不够的朋友可以点波...
unity3d 编写的tcp和udp基于socket的网络通讯demo,其中包含客户端和服务器。以供大家参考。