MyComponent_UdpSet UDP通讯发送端

博客围绕UDP发送端展开,虽未给出具体内容,但可推测涉及UDP发送端的原理、功能、使用方法等信息技术相关内容。

 

using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using MyTool.Static;
using System;
using System.Threading.Tasks;

/*
 * 作者:闪电Y黑客
 *
 * 日期:2019.5.5
 * 
 * 功能:用于UDP通讯的发送端
 * 
 * 注:知识量不足,暂时做为组件
 * 
 */

namespace MyTool.Component
{
    /// <summary>
    /// UDP发送端
    /// </summary>
    public class MyComponent_UDPSet : MonoBehaviour
    {
        public string SetIP;//目标IP
        public int SetPORT;//目标端口

        public float SetTimeDelay;//发送间隔(秒)

        public bool StartClock = false;//是否启动心跳

        public float ClockTimeDelay;//心跳发送间隔(秒)



        private Queue SetQueue;//用于发送的数据队列

        private UdpClient udpSet;//udp

        private IPEndPoint SetServerPoint;//客户端地址

        private MyThread SetThread;//客户端接收线程

        private DateTime LateTime;//用于心跳计时

        public void SetDataQueue(byte[] data)//添加发送数据队列
        {
            SetQueue.Enqueue(data);
        }


        private void Awake()
        {
            SetQueue = new Queue();
            LateTime = DateTime.Now;//刷新心跳时间

            udpSet = new UdpClient();
            SetServerPoint = new IPEndPoint(IPAddress.Parse(SetIP), SetPORT);//发送服务器端口IP

            //=[线程启动]======
            SetThread = new MyThread(DataQueueProcessor);
            SetThread.Start();
        }


        private void DataQueueProcessor(MyThread Bit)//数据队列处理器
        {
            while (Bit.isStart)
            {
                if (TriggerMarker.Clock(ref LateTime, ClockTimeDelay) && StartClock)//心跳时间判断
                {
                    SetQueue.Enqueue(new byte[] { 1 });//心跳消息暂时为Byte 1
                    LateTime = DateTime.Now;//刷新心跳时间
                }

                if (SetQueue.Count > 0)//发送数据
                {
                    byte[] data = (byte[])SetQueue.Dequeue();
                    udpSet.Send(data, data.Length, SetServerPoint);//针对发送数据 
                    LateTime = DateTime.Now;//刷新心跳时间
                }

                Thread.Sleep((int)SetTimeDelay * 1000);//处理延时
            }
        }




        void OnApplicationQuit()//释放资源
        {
            SetThread.End();
            udpSet.Close();
        }
        void OnDestroy()//释放资源
        {
            SetThread.End();
            udpSet.Close();
        }



    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值