Unity解决Udp客户端无法接收数据的问题
在我之前做过的项目中,其中不少涉及Udp客户端的项目。在这些项目中,一般只需要实现客户端向服务器端发送数据的功能就可以了,一般都不用接收服务器端发送的数据,但是也有同学使用了我分享的udp客户端插件,说是接收不到服务器端发送的数据。我也一直没时间修改这个bug,最近有一个需要使用Udp客户端接收服务端数据的功能,趁着这个机会我把这个bug修复了,分享在下面。
修改
1.代码修改主要修改两个地方,如下所示:
//初始化void InitSocket(){//定义连接的服务器ip和端口,可以是本机ip,局域网,互联网ipSend = new IPEndPoint(IPAddress.Parse(thisIP), localPort);//ipSend = new IPEndPoint(IPAddress.Parse("192.168.1.200"),50000);//定义套接字类型,在主线程中定义socketSend = new UdpClient();//定义服务端//定义侦听端口,侦听任何IPipReceive = new IPEndPoint(IPAddress.Any, 0);//定义套接字类型,在主线程中定义socketReceive = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//服务端需要绑定ipsocketReceive.Bind(ipReceive);//定义客户端IPEndPoint senderReceive = new IPEndPoint(IPAddress.Any, 0);serverEnd = (EndPoint)senderReceive;clientEnds = new List<EndPoint>();//开启一个线程连接,必须的,否则主线程卡死connectThread = new Thread(new ThreadStart(SocketReceive));connectThread.Start();}
2.再一处就是接收数据的方法,代码如下所示:
/// <summary>/// 服务器接收/// </summary>void SocketReceive(){//进入接收循环while (true){recvData = new byte[1024];//获取客户端,获取客户端数据,用引用给客户端赋值recvLen = socketReceive.ReceiveFrom(recvData, ref serverEnd);print("message from: " + serverEnd.ToString()); //打印客户端信息//输出接收到的数据recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);Debug.Log(recvStr);}}
3.修改完成,运行程序,使用服务器向Udp客户端发送数据,发现客户端已经可以接收到服务器发送过来的数据了。