服务端:
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(); } }