当前位置: 首页 > news >正文

unity 接收和发送Udp消息

因为需要用到unity和其他的程序交互,其他程序可以提供Udp消息,因此找了合适的相互连接方法。这里直接上代码。

工具类:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.Video;public class UdpManager
{public static string m_receivedMessage;static IPEndPoint m_IPEndPoint;static UdpClient m_udpClient;public static void InitializeUdpClient(){m_IPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);m_udpClient = new UdpClient(m_IPEndPoint);UdpModel s = new UdpModel(m_udpClient, m_IPEndPoint);m_udpClient.BeginReceive(EndReceive, s);Debug.Log("服务器启动");}//结束得到的信息private static void EndReceive(IAsyncResult ar){try{UdpModel m_UdpModel = ar.AsyncState as UdpModel;if (m_UdpModel != null){UdpClient udpClient = m_UdpModel.m_udpclient;IPEndPoint ip = m_UdpModel.m_ip;Byte[] receiveBytes = udpClient.EndReceive(ar, ref ip);string msg = Encoding.UTF8.GetString(receiveBytes);m_receivedMessage = msg;udpClient.BeginReceive(EndReceive, m_UdpModel); //开始获取}}catch (Exception ex){//处理异常}}//udp模型private class UdpModel{public UdpClient m_udpclient = null;public IPEndPoint m_ip;public UdpModel(UdpClient udpclient, IPEndPoint ip){this.m_udpclient = udpclient;this.m_ip = ip;}}//关闭public static void Close(){if (m_udpClient != null){m_udpClient.Close();m_udpClient = null;}}/// <summary>/// 发送数据/// </summary>/// <param name="obj"></param>public static void SendMessage(string message){UdpClient myUdpClient = new UdpClient();IPEndPoint endpoint;//当前服务器ip和端口号myUdpClient = new UdpClient(new IPEndPoint(IPAddress.Any, 8800));//要发送给的地址和端口号,255.255.255.255表示在这个局域网的所有ipendpoint = new IPEndPoint(IPAddress.Parse("192.168.31.174"), 1180);byte[] bytes = Encoding.UTF8.GetBytes(message);try{myUdpClient.Send(bytes, bytes.Length, endpoint);myUdpClient.Close();}catch (Exception err){Console.Write(err.Message, "发送失败");}finally{myUdpClient.Close();}}
}

需要挂载运行的脚本:

using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using UnityEngine.Video;/// <summary>
/// 服务接收生成
/// </summary>
public class ServerControl : MonoBehaviour
{void Start(){UdpManager.InitializeUdpClient();//part1Root.SetActive(true);//part2Root.SetActive(false);}void Update(){if (UdpManager.m_receivedMessage != null){string[] array = UdpManager.m_receivedMessage.Split(',');Debug.Log(UdpManager.m_receivedMessage);UdpManager.m_receivedMessage = null;}}private void OnDestroy(){UdpManager.Close();}
}

使用方法很简单,把ServerControl脚本挂载在一个物体上,直接运行即可,接受信息的方法和发送的方法都在两个脚本里。

http://www.lryc.cn/news/224139.html

相关文章:

  • 机器学习股票大数据量化分析与预测系统 - python 计算机竞赛
  • 架构描述语言(ADL)
  • GZ038 物联网应用开发赛题第2套
  • Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍
  • Vue3全局共享数据
  • openai自定义API操作 API 返回值说明
  • jsp基本表格和简单算法表格
  • 在线存储系统源码 网盘网站源码 云盘系统源码
  • 线性代数(六)| 二次型 标准型转换 正定二次型 正定矩阵
  • Kotlin系列之注解详解
  • Go 面向对象,多态,基本数据类型
  • 使用 Python修改JSON 文件中对应键值
  • 【Rust日报】2023-11-08 RustyVault -- 基于 rust 的现代秘密管理系统
  • 07【保姆级】-GO语言的程序流程控制【if switch for while 】
  • 求2个字符串的最短编辑距离 java 实现
  • 单例模式 rust和java的实现
  • tqdm学习
  • Zigbee—网络层地址分配机制
  • [Matlab]基于LSTM+NSGA2的风光火力发电策略优化
  • 智安网络|探索人机交互的未来:自然语言处理的前沿技术
  • Could not load library libcudnn_cnn_train.so.8, 解决类似问题的思路与方法
  • 孙子兵法_00000
  • 代挂单页网址发布页+加盟代理+APP下载页源码
  • 计算机视觉驾驶行为识别应用简述
  • asp.net core configuration配置读取
  • windows上 Nexus 批量上传 maven依赖npm依赖
  • 已解决:Python Error: IndentationError: expected an indented block 问题
  • 汽车标定技术(六)--基于模型开发如何生成完整的A2L文件(2)
  • 普华永道于进博会发布全新升级的DSAI投资管理数字化平台
  • ssm+vue的高校学生课堂考勤系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。