using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System;
using System.Text;
///@brief
///文件名称:UDPAsyncRecvive
///功能描述:UDP异步接收
///数据表:
///作者:YuXianQiang
///日期:#CreateTime#
///R1:
///修改作者:
///修改日期:
///修改理由:
public class UDPAsyncRecvive : MonoBehaviour
{
void Start()
{
ThreadRecvive();
}
/// <summary>
/// 开始线程接收
/// </summary>
private void ThreadRecvive()
{
//开一个新线程接收UDP发送的数据
new Thread(delegate() //delegate()也可写成 ()=>
{
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5678);
UdpClient udp = new UdpClient(ipep);
UDPState state = new UDPState(ipep, udp);
udp.BeginReceive(CallBackRecvive, state); //异步接收
}) {IsBackground = true}.Start(); //设置为后台线程,并开启线程
}
/// <summary>
/// 异步接收回调
/// </summary>
/// <param name="ar"></param>
private void CallBackRecvive(IAsyncResult ar)
{
UDPState state = ar.AsyncState as UDPState;
if (state != null)
{
IPEndPoint ipep = state.IPEP;
//这里接收到数据后,应该做数据完整检查,这里只是单纯做一个接收
byte[] data = state.UDPClient.EndReceive(ar, ref ipep);
//这里可以做一个数据检查 如:void CheckData(data)
Debug.Log(Encoding.Default.GetString(data));
//继续接收下一条消息
state.UDPClient.BeginReceive(CallBackRecvive, state);
}
}
}
public class UDPState
{
private UdpClient udpClient;
public UdpClient UDPClient
{
get { return udpClient; }
}
private IPEndPoint ipep;
public IPEndPoint IPEP
{
get { return ipep; }
}
//构造函数
public UDPState(IPEndPoint ipep, UdpClient udpClient)
{
this.ipep = ipep;
this.udpClient = udpClient;
}
}
Unity Sockets UDP 异步 接收
最新推荐文章于 2024-08-12 15:12:51 发布