Unity Sockets UDP 异步 接收

原创 2017年07月04日 16:20:38
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;
    }
}

相关文章推荐

Unity3d之Socket UDP协议

(一)Socket(套接字)UDP协议的特点 1、是基于无连接的协议,没有生成连接的延迟所以速度比TCP快; 2、支持一对一和一对多连接,可以使用广播的方式多地址发送; 3、与Tcp的报头比是8:20...

在unity中用UDP实现发送消息机制

首先,用Unity新建两个项目,然后一个写Server,另一个写Client。`using UnityEngine; using System.Collections; //引入库 using ...

Unity利用UDP通信(发送字符串)

客户端代码如下:using UnityEngine; using System.Collections; using System.Net; using System.Net.Sockets; usi...

unity开发:UDP socket网络连接

由于UDP是面向无连接的通信,所以实际上服务端和客户端是对等的,只不过服务端绑定了一个监听端口,而客户端每次都是自动分配的连接端口,其实也可以做成两边都绑定端口或者都不绑定端口的P2P模式。 以下U...

【Unity3D自学记录】网络编程之TCP&UDP的区别

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起...
  • hackdjh
  • hackdjh
  • 2014年11月10日 10:47
  • 2124

Unity Socket UDP

using System.Collections; using System.Collections.Generic; using System.Net.Sockets; using System.N...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#网络编程系列文章(七)之UdpClient实现异步UDP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 本文介绍 UdpClient...

c# 使用UDPClient实现异步通信

下载:http://download.csdn.net/download/cdtaixf/7239105 server: using System; using System.Te...

TCP/UDP异步发送接收

  • 2015年08月11日 16:07
  • 196KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity Sockets UDP 异步 接收
举报原因:
原因补充:

(最多只允许输入30个字)