
客户端 接收端 :
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using UnityEngine;
- using UnityEngine.UI;
-
- public class UDPServer : MonoBehaviour
- {
- //以下默认都是私有的成员
- Socket socket;//目标socket
- EndPoint clientEnd;//客户端IP
- EndPoint ipEnd;//侦听端口
- public string recvStr; //接收的字符串
- string sendStr;//发送的字符串
- byte[] recvData = new byte[1024];//接收的数据,必须为字节
- byte[] sendData = new byte[1024];//发送的数据,必须为字节
- int recvLen;//接收的数据长度
- Thread connectThread;//连接线程
-
- // Start is called before the first frame update
- void Start()
- {
- InitSocket();
- }
- private void OnApplicationQuit()
- {
- SocketQuit();
-
- }
- // Update is called once per frame
- void Update()
- {
- //监听接受数据
- switch (recvStr)
- {
- //接收到的数据
- case "":
- //事件
- break;
-
- }
- }
- void InitSocket()
- {
- // 定义侦听端口,侦听任何IP 自定义端口号和服务端保持一致
- ipEnd = new IPEndPoint(IPAddress.Any, 8883);//定义套接字类型,在主线程中定义
- socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//服务端需要绑定ip
- socket.Bind(ipEnd);//定义客户端
- IPEndPoint sender = new IPEndPoint(IPAddress.Any, 8880);//自定义端口号 发送给别的某个电脑的 这台电脑的端口号
- clientEnd = (EndPoint)sender;
- //print("waiting for UDP dgram");
- //开启一个线程连接,必须的,否则主线程卡死
- connectThread = new Thread(new ThreadStart(SocketReceive));
- connectThread.Start();
- }
-
- public void SocketSend(string sendStr)
- {
- //清空发送缓存
- sendData = new byte[1024];//数据类型转换
- sendData = Encoding.UTF8.GetBytes(sendStr);//发送给指定客户端
- socket.SendTo(sendData, sendData.Length, SocketFlags.None, clientEnd);
- }
-
- void SocketReceive()
- {
- //进入接收循环
- while (true)
- {
- //对data清零
- recvData = new byte[1024];
- //获取客户端,获取客户端数据,用引用给客户端赋值
- recvLen = socket.ReceiveFrom(recvData, ref clientEnd);
- //print("message from:" + clientEnd.ToString());//打印客户端信息
- // 输出接收到的数据
- recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);
-
- print("我是服务器,接收到客户端的数据" + recvStr);
- //将接收到的数据经过处理再发送出去
- sendStr = "From Server333: " + recvStr;
- SocketSend(sendStr);
-
- //ProcessInformation(recvStr);
- // Debug.Log(sendStr);
- }
-
- }
- //连接关闭
- void SocketQuit()
- {
- //关闭线程
- if (connectThread != null)
- {
- connectThread.Interrupt();
- connectThread.Abort();
- }
- // 最后关闭socket
- if (socket != null)
- socket.Close();
- print("disconnect-1");
- }
-
- }

服务器 发送端 :
- using UnityEngine;
- using UnityEngine.UI;
- using System.Collections;
- using System;
- using System.IO;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- //服务器 发送端
- public class UDPClient : MonoBehaviour
- {
- public string recvStr;
- private string UDPClientIP;
- Socket socket;
- EndPoint serverEnd;
- IPEndPoint ipEnd;
-
- byte[] recvData = new byte[1024];
- byte[] sendData = new byte[1024];
- int recvLen = 0;
- Thread connectThread;
-
-
- private void Awake()
- {
-
- }
- void Start()
- {
- //IP地址
- UDPClientIP = "192.168.1.16";//自己电脑的ip地址
- UDPClientIP = UDPClientIP.Trim();
- InitSocket();
- }
-
- //ipEnd = new IPEndPoint(IP地址,端口号);
- //这里用json读取配置方便外部修改
- void InitSocket()
- {
- ipEnd = new IPEndPoint(IPAddress.Parse(UDPClientIP), 8880);// 后面的端口是接收端的端口号
- socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
- IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
- serverEnd = (EndPoint)sender;
- //开启一个线程连接
- connectThread = new Thread(new ThreadStart(SocketReceive));
- connectThread.Start();
- }
-
- //可以绑定Button发送string类型信息
- public void SocketSend(string sendStr)
- {
- //清空
- sendData = new byte[1024];
- //数据转换
- sendData = Encoding.UTF8.GetBytes(sendStr);
- //发送给指定服务端
- socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
- }
-
- //接收服务器信息
- void SocketReceive()
- {
- while (true)
- {
-
- recvData = new byte[1024];
- try
- {
- recvLen = socket.ReceiveFrom(recvData, ref serverEnd);
- }
- catch (Exception e)
- {
- }
-
- //print("信息来自: " + serverEnd.ToString());
- if (recvLen > 0)
- {
- recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);
- print(recvStr);
- }
-
-
- }
- }
-
- //连接关闭
- void SocketQuit()
- {
- //关闭线程
- if (connectThread != null)
- {
- connectThread.Interrupt();
- connectThread.Abort();
- }
- //最后关闭socket
- if (socket != null)
- socket.Close();
- }
- void OnApplicationQuit()
- {
- SocketQuit();
- }
-
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.K))
- {
- SocketSend("ddddd");
- }
- }
-
- }