Unity解決Udp客戶端無法接收數(shù)據(jù)的問題
在我之前做過的項目中,其中不少涉及Udp客戶端的項目。在這些項目中,一般只需要實現(xiàn)客戶端向服務器端發(fā)送數(shù)據(jù)的功能就可以了,一般都不用接收服務器端發(fā)送的數(shù)據(jù),但是也有同學使用了我分享的udp客戶端插件,說是接收不到服務器端發(fā)送的數(shù)據(jù)。我也一直沒時間修改這個bug,最近有一個需要使用Udp客戶端接收服務端數(shù)據(jù)的功能,趁著這個機會我把這個bug修復了,分享在下面。
修改
1.代碼修改主要修改兩個地方,如下所示:
//初始化
void InitSocket()
{
//定義連接的服務器ip和端口,可以是本機ip,局域網(wǎng),互聯(lián)網(wǎng)
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.再一處就是接收數(shù)據(jù)的方法,代碼如下所示:文章來源:http://www.zghlxwxcb.cn/news/detail-799228.html
/// <summary>
/// 服務器接收
/// </summary>
void SocketReceive()
{
//進入接收循環(huán)
while (true)
{
recvData = new byte[1024];
//獲取客戶端,獲取客戶端數(shù)據(jù),用引用給客戶端賦值
recvLen = socketReceive.ReceiveFrom(recvData, ref serverEnd);
print("message from: " + serverEnd.ToString()); //打印客戶端信息
//輸出接收到的數(shù)據(jù)
recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);
Debug.Log(recvStr);
}
}
3.修改完成,運行程序,使用服務器向Udp客戶端發(fā)送數(shù)據(jù),發(fā)現(xiàn)客戶端已經(jīng)可以接收到服務器發(fā)送過來的數(shù)據(jù)了。文章來源地址http://www.zghlxwxcb.cn/news/detail-799228.html
到了這里,關于Unity解決Udp客戶端無法接收數(shù)據(jù)的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!