IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【Unity随手记】UDP异步发送与接收 -> 正文阅读

[网络协议]【Unity随手记】UDP异步发送与接收

完整代码:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;

public class UDPClientController : MonoBehaviour
{
    [Header("目标IP (Debug Only)")] [SerializeField] private string targetIp;
    [Header("目标端口号")] [SerializeField] public int ___targetPort = 8418;
    [Header("自身端口号")] [SerializeField] public int ___myPort = 8419;
    [Header("是否接收数据")] [SerializeField] private bool isStartReceiver;
    public string ___targetIp//-------------------------------------------用于外部修改目标IP
    {
        get => targetIp;
        set
        {
            if (targetIp != value)
            {
                targetIp = value;
                try
                {
                    targetIpEndPoint = new IPEndPoint(IPAddress.Parse(targetIp), ___targetPort);
                }
                catch { }
            }
        }
    }
    private const int threadWaitTime = 10;//接收数据后,再次接收,等待时间(毫秒)
    private IPEndPoint targetIpEndPoint;//目标端点
    private UdpClient udpClient;//自身客户端
    private static bool isHaveData;
    private static byte[] receiveBytes1;//接收到的字节组
    private static byte[] receiveBytes//将接收到数据给这里,并通知系统来数据了
    {
        get => receiveBytes1;
        set
        {
            receiveBytes1 = value;
            isHaveData = true;
        }
    }
    #region 单例
    public static UDPClientController a;
    private void Awake() => a = this;
    #endregion



    private void Start()
    {
        udpClient = new UdpClient(___myPort);
        if (!string.IsNullOrEmpty(___targetIp))
            ___targetIp = targetIp;

        if (isStartReceiver)
            _____StartReceive();
    }
    private void Update()
    {
        if (isHaveData)
        {
            isHaveData = false;
            string str = Encoding.Default.GetString(receiveBytes);
            print("接受到内容" + str);

        }
    }




    // 发送字符串
    public void _____SendString(string str)
    {
        SendBytes(Encoding.Default.GetBytes(str));
    }
    // 发送JPG 最大64K
    public void _____SendT2dJPG(Texture2D t2d)
    {
        SendBytes(t2d.EncodeToJPG());
    }







    private void _____StartReceive()
    {
        udpClient.BeginReceive(ReceiveCallback, udpClient);
    }
    private static void ReceiveCallback(IAsyncResult result)
    {
        UdpClient udpClient = (UdpClient)result.AsyncState;
        IPEndPoint iPEndPoint = null;
        receiveBytes = udpClient.EndReceive(result, ref iPEndPoint);
        //print("收到来自" + iPEndPoint.Address.ToString() + iPEndPoint.Port.ToString() + "的数据!");
        Thread.Sleep(threadWaitTime);
        udpClient.BeginReceive(ReceiveCallback, udpClient);
    }
    /// <summary>
    /// 发送字节组
    /// </summary>
    /// <param name="bs">字节组</param>
    private void SendBytes(byte[] bs)
    {
        print("字节长度:" + bs.Length);
        if (targetIpEndPoint != null)
            udpClient.BeginSend(bs, bs.Length, targetIpEndPoint, SendCallback, udpClient);
        else
            Debug.LogError("“目标IP” 没有设置!");
    }
    private static void SendCallback(IAsyncResult result)
    {
        UdpClient u = (UdpClient)result.AsyncState;
    }
}


使用说明:

在这里插入图片描述

更改目标IP:

在这里插入图片描述

发送:

在这里插入图片描述

接收:

在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:20:18  更:2022-01-01 14:20:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/6 12:59:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码