这是代码,recvfrom一直是阻塞的,确定服务端有回复了,但是就是收不到,这个方法是网上都在转载的unity使用udp的方法。无语了。
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
public class UdpHandler : MonoBehaviour
{
public static UdpHandler instance;
/// <summary>
/// 目标socket
/// </summary>
Socket socket;
/// <summary>
/// 服务端
/// </summary>
EndPoint serverEnd;
/// <summary>
/// 服务端端口
/// </summary>
IPEndPoint ipEnd;
/// <summary>
/// /接收的数据,必须为字节
/// </summary>
byte[] recvData = new byte[20];
/// <summary>
/// 连接线程
/// </summary>
Thread connectThread;
void Start()
{
InitSocket();
instance = this;
}
/// <summary>
/// 初始化
/// </summary>
public void InitSocket()
{
//定义连接的服务器ip和端口,可以是本机ip,局域网,互联网
ipEnd = new IPEndPoint(IPAddress.Parse("192.168.1.105"), 8888);
//定义套接字类型,在主线程中定义
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))
{
IsBackground = true
};
connectThread.Start();
}
public void SocketSend(byte[] sendStr)
{
//发送给指定服务端
socket.SendTo(sendStr, sendStr.Length, SocketFlags.None, ipEnd);
}
/// <summary>
/// 服务器接收
/// </summary>
void SocketReceive()
{
while (true)
{
recvData = new byte[1024];
socket.ReceiveFrom(recvData, ref serverEnd);
SendMessage("MessageReceiveHandler", recvData);
}
}
/// <summary>
/// 连接关闭
/// </summary>
public void SocketQuit()
{
//关闭线程
if (connectThread != null)
{
connectThread.Interrupt();
connectThread.Abort();
}
//最后关闭socket
if (socket != null)
{
socket.Close();
}
}
}