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();
//定义服务端
//定义侦听端口,侦听任何IP
ipReceive = new IPEndPoint(IPAddress.Any, 0);
//定义套接字类型,在主线程中定义
socketReceive = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//服务端需要绑定ip
socketReceive.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.再一处就是接收数据的方法,代码如下所示:文章来源:https://www.toymoban.com/news/detail-799228.html
/// <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客户端发送数据,发现客户端已经可以接收到服务器发送过来的数据了。
文章来源地址https://www.toymoban.com/news/detail-799228.html
到了这里,关于Unity解决Udp客户端无法接收数据的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!