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;
    }
}

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

首先,用Unity新建两个项目,然后一个写Server,另一个写Client。`using UnityEngine; using System.Collections; //引入库 using ...
  • caojianhua1993
  • caojianhua1993
  • 2016年12月21日 16:02
  • 3325

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

客户端代码如下:using UnityEngine; using System.Collections; using System.Net; using System.Net.Sockets; usi...
  • lei_7103
  • lei_7103
  • 2017年04月07日 16:19
  • 2128

Unity3D笔记——UDP 广播和异步接受

前言:Unity3D笔记是我平时做一些好玩的测试和研究,记录的笔记。会比较详细也可能随口一提就过了。 所以大家见谅了,内容一般都会是原创的(非原创我会注明转载)。由于很多内容其他的朋友也肯定研究发表过...
  • YYL_Debug
  • YYL_Debug
  • 2017年12月27日 10:05
  • 64

【Unity】场景异步加载进度条的制作

[csharp] view plain copy using UnityEngine;   using System.Collections;   using Uni...
  • swj524152416
  • swj524152416
  • 2016年10月28日 11:40
  • 728

unity开发:UDP socket网络连接

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

Unity3d之Socket UDP协议

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

unity3d socket TCP 异步连接数据

using UnityEngine; using System.Collections; using System; using System.Threading; using System....
  • yutyliu
  • yutyliu
  • 2014年04月23日 14:16
  • 3988

unity学习Socket(一)

我之前写博客是为了写而写,不管质量都乱写,有时间得去清理一下。 说来感觉自己好悲哀啊,出去实习没做过网游,也几乎没用Socket,所以现在在学校没事做必须多了解一些网络通信这类的东西,从头开始学吧,...
  • dlnuchunge
  • dlnuchunge
  • 2013年05月07日 20:01
  • 3511

Unity3D UDP 服务端例子

来源:http://forum.unity3d.com/threads/windows-udp-voice-recognition-server.172758/ // ***********...
  • weiming8517
  • weiming8517
  • 2016年03月21日 15:08
  • 3163

Unity Socket UDP

using System.Collections; using System.Collections.Generic; using System.Net.Sockets; using System.N...
  • qq992817263
  • qq992817263
  • 2015年07月01日 13:04
  • 1463
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity Sockets UDP 异步 接收
举报原因:
原因补充:

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