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

unity UDP 通信

客户端 接收端 :

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;public class UDPServer : MonoBehaviour
{//以下默认都是私有的成员Socket socket;//目标socketEndPoint clientEnd;//客户端IPEndPoint ipEnd;//侦听端口public string recvStr; //接收的字符串string sendStr;//发送的字符串byte[] recvData = new byte[1024];//接收的数据,必须为字节byte[] sendData = new byte[1024];//发送的数据,必须为字节int recvLen;//接收的数据长度Thread connectThread;//连接线程// Start is called before the first frame updatevoid Start(){InitSocket();}private void OnApplicationQuit(){SocketQuit();}// Update is called once per framevoid Update(){//监听接受数据switch (recvStr){//接收到的数据case ""://事件break;}}void InitSocket(){// 定义侦听端口,侦听任何IP  自定义端口号和服务端保持一致ipEnd = new IPEndPoint(IPAddress.Any, 8883);//定义套接字类型,在主线程中定义socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//服务端需要绑定ipsocket.Bind(ipEnd);//定义客户端IPEndPoint sender = new IPEndPoint(IPAddress.Any, 8880);//自定义端口号 发送给别的某个电脑的 这台电脑的端口号clientEnd = (EndPoint)sender;//print("waiting for UDP dgram");//开启一个线程连接,必须的,否则主线程卡死connectThread = new Thread(new ThreadStart(SocketReceive));connectThread.Start();}public void SocketSend(string sendStr){//清空发送缓存sendData = new byte[1024];//数据类型转换sendData = Encoding.UTF8.GetBytes(sendStr);//发送给指定客户端socket.SendTo(sendData, sendData.Length, SocketFlags.None, clientEnd);}void SocketReceive(){//进入接收循环while (true){//对data清零recvData = new byte[1024];//获取客户端,获取客户端数据,用引用给客户端赋值recvLen = socket.ReceiveFrom(recvData, ref clientEnd);//print("message from:" + clientEnd.ToString());//打印客户端信息// 输出接收到的数据recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);print("我是服务器,接收到客户端的数据" + recvStr);//将接收到的数据经过处理再发送出去sendStr = "From Server333: " + recvStr;SocketSend(sendStr);//ProcessInformation(recvStr);// Debug.Log(sendStr);}}//连接关闭void SocketQuit(){//关闭线程if (connectThread != null){connectThread.Interrupt();connectThread.Abort();}// 最后关闭socketif (socket != null)socket.Close();print("disconnect-1");}}

服务器 发送端 :

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
//服务器  发送端
public class UDPClient : MonoBehaviour
{public string recvStr;private string UDPClientIP;Socket socket;EndPoint serverEnd;IPEndPoint ipEnd;byte[] recvData = new byte[1024];byte[] sendData = new byte[1024];int recvLen = 0;Thread connectThread;private void Awake(){}void Start(){//IP地址UDPClientIP = "192.168.1.16";//自己电脑的ip地址UDPClientIP = UDPClientIP.Trim();InitSocket();}//ipEnd = new IPEndPoint(IP地址,端口号);//这里用json读取配置方便外部修改void InitSocket(){ipEnd = new IPEndPoint(IPAddress.Parse(UDPClientIP), 8880);// 后面的端口是接收端的端口号socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);serverEnd = (EndPoint)sender;//开启一个线程连接connectThread = new Thread(new ThreadStart(SocketReceive));connectThread.Start();}//可以绑定Button发送string类型信息public void SocketSend(string sendStr){//清空sendData = new byte[1024];//数据转换sendData = Encoding.UTF8.GetBytes(sendStr);//发送给指定服务端socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);}//接收服务器信息void SocketReceive(){while (true){recvData = new byte[1024];try{recvLen = socket.ReceiveFrom(recvData, ref serverEnd);}catch (Exception e){}//print("信息来自: " + serverEnd.ToString());if (recvLen > 0){recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);print(recvStr);}}}//连接关闭void SocketQuit(){//关闭线程if (connectThread != null){connectThread.Interrupt();connectThread.Abort();}//最后关闭socketif (socket != null)socket.Close();}void OnApplicationQuit(){SocketQuit();}void Update(){if (Input.GetKeyDown(KeyCode.K)){SocketSend("ddddd");}}}

相关文章:

unity UDP 通信

客户端 接收端 : using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine; using UnityEngine.UI;public cla…...

一篇解决JavaScript

华子目录 JavaScript介绍JavaScript的组成JavaScript书写位置内部外部 js注释js输入(prompt)js输出js变量js基本数据类型number(数值类型)string(字符串)Boolean(布尔类型)undefined…...

Unity UGUI(一)基础组件

文章目录 1.Text:文本框2.Image:精灵图3.RawImage:生图4.Button:按钮5.InputField:输入框6.Tooggle:选择框7.Slider:滑动条8.Dropdown:下拉菜单9.Scrollbar:滚动条10.Scr…...

【微服务】六. Nacos配置管理

6.1 Nacos实现配置管理 配置更改热更新 在nacos左侧新建配置管理 Data ID:就是配置文件名称 一般命名规则:服务名称-环境名称.yaml 配置内容填写:需要热更新需求的配置 配置文件的id:[服务名称]-[profile].[后缀名] 分组&#…...

【华为云云耀云服务器L实例评测|云原生】自定制轻量化表单Docker快速部署云耀云服务器

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...

无涯教程-JavaScript - ACOTH函数

描述 ACOTH函数返回数字的反双曲余切。 语法 ACOTH (number)争论 Argument描述Required/OptionalNumberThe absolute value of Number must be greater than 1. i.e., Number must be must be less than -1 or greater than 1.Required Notes 用于计算双曲反余切的方程为-…...

Qt QTreeWidge解决setItemWidget后,导致复选框失效

一、问题: QTreeWidget某一项加上itemWidget后,导致复选框失效问题 二、解决方法 将要加上的widget控件加到该项的后续的列,即控件跟复选框不同一列 三、具体代码 QTreeWidget* treeW new QTreeWidget; treeW->setColumnCount(2); /…...

strncpy

strncpy: 函数介绍: 函数原型: char *strncpy(char *dest, const char *src, int n) 返回值:dest字符串起始地址 说明: 1、当src字符串长度小于n时,则拷贝完字符串后,剩余部分将用空字节填…...

c++学习【23】matlab实现FOC算法

% 创建Figure窗口和滑块 figure;Id_slider uicontrol(Style, slider, Position, [100 50 120 20], ...Min, -5, Max, 5, Value, 1.5, Callback, updateVoltage); Id_text uicontrol(Style, text, Position, [100 80 120 20], String, d轴电流: 1.5);Iq_slider uicontrol(Sty…...

2020-2023中国高等级自动驾驶产业发展趋势研究-概念界定

1.1 概念界定 自动驾驶发展过程中,中国出现了诸多专注于研发L3级以上自动驾驶的公司,其在业界地位也越来越重要。本报告围绕“高等级自动驾驶” 展开,并聚焦于该技术2020-2023年在中国市场的变化趋势进行研究。 1.1.1 什么是自动驾驶 自动驾驶…...

ICPC 2022 网络赛 h (模拟

#include<bits/stdc.h> using namespace std; using VI vector<int>; using ll long long; const int mod 20220911;//枚举数位&#xff0c;枚举这一位余数是几 //每一位的限制&#xff0c; //如果有repeat 就下一个 int change(string x){int res 0 ;for(int …...

如何保护您的工业网络?

工业网络通过连接机器、设备和系统&#xff0c;在实现工业流程的高效生产、监控和管理方面发挥着关键作用。保护工业网络&#xff0c;确保其关键资产和流程的完整性、可用性和机密性&#xff0c;是工业组织的首要任务。在本文中&#xff0c;我们将探讨保护工业网络安全面临的障…...

Python之设计模式

一、设计模式_工厂模式实现 设计模式是面向对象语言特有的内容&#xff0c;是我们在面临某一类问题时候固定的做法&#xff0c;设计模式有很多种&#xff0c;比较流行的是&#xff1a;GOF&#xff08;Goup Of Four&#xff09;23种设计模式。当然&#xff0c;我们没有必要全部学…...

redis 多租户隔离 ACL 权限控制(redis-cli / nodejs的ioredis )

Redis 6版本之后&#xff1a;提供ACL的功能对用户进行更细粒度的权限控制 &#xff1a;&#xff08;1&#xff09;接入权限:用户名和密码&#xff08;2&#xff09;可以执行的命令&#xff08;3&#xff09;可以操作的 KEY ACL常用规则介绍&#xff1a; 指令列表 //增加可操…...

【算法专题突破】滑动窗口 - 找到字符串中所有字母异位词(14)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;438. 找到字符串中所有字母异位词 - 力扣&#xff08;Leetcode&#xff09; 这道题很好理解&#xff0c;就是找出从不同位置开始的所有异位词。 2. 算法原理 那我们该如…...

C++生成-1到1的随机数

目录 一、方法一1、主要函数2、示例代码 二、方法二1、方法概述2、参考文献3、示例代码 三、方法三1、参考链接2、示例代码 本文由CSDN点云侠原创&#xff0c;原文链接。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、方法一 1、主要函数…...

React-Hooks 和 React-Redux

注&#xff1a;Redux最新用法参考 个人React专栏 react 初级学习 Hooks基本介绍------------------------- Hooks&#xff1a;钩子、钓钩、钩住&#xff0c; Hook 就是一个特殊的函数&#xff0c;让你在函数组件中获取状态等 React 特性 &#xff0c;是 React v16.8 中的新增功…...

虚拟机下载与Ubuntu安装

下载VMware 进入官网资源 -> 产品下载 -> Desktop & End-User Computing选择 VMware Workstation Pro 这一栏&#xff0c;点击右边的下载产品&#xff0c;跳到新页面选择版本&#xff08;我选的是 16.0&#xff09;&#xff0c;然后点击下面对应系统的转至下载&…...

【小数点】C#使用Math.Round方法保留指定小数点位数,并且整数也同样保持统一的2位

2023年&#xff0c;第38周。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 在实际开发项目中&#xff0c;特别是涉及金额之类的字段&#xff0c;一般都会用到小数&#xff0c;有些是保留1、2、3小数点。 本篇文章主要简单讲讲&#xff0c;如…...

Android多种方法获取系统属性

这里使用获取rga版本为例 1&#xff0c;使用sh脚本方法 sh的编写 echo $(getprop vendor.rga_api.version) 其中&#xff0c;vendor.rga_api.version是关键字 相关方法也有两种&#xff0c;一种是从sh脚本读取流&#xff0c;一种是指令很少的&#xff0c;直接读取字符串化…...

Python实战:3种高效连接ClickHouse的方法对比(附性能测试)

Python实战&#xff1a;3种高效连接ClickHouse的方法对比&#xff08;附性能测试&#xff09; 在数据分析领域&#xff0c;ClickHouse凭借其卓越的列式存储和向量化执行引擎&#xff0c;已成为处理海量数据的首选解决方案之一。而Python作为数据科学家的瑞士军刀&#xff0c;如…...

OWL ADVENTURE助力在线教育:AI自动批改绘图作业实践

OWL ADVENTURE助力在线教育&#xff1a;AI自动批改绘图作业实践 想象一下&#xff0c;一位在线美术老师&#xff0c;面对上百份刚刚提交的手绘作业。他需要一份份打开&#xff0c;仔细查看学生的构图、线条、比例&#xff0c;然后写下针对性的评语。这个过程不仅耗时费力&…...

OpenClaw+GLM-4.7-Flash低成本方案:自建模型替代SaaS API

OpenClawGLM-4.7-Flash低成本方案&#xff1a;自建模型替代SaaS API 1. 为什么选择自建模型替代商业API 去年夏天&#xff0c;当我第一次尝试用OpenClaw自动化处理公司周报时&#xff0c;被OpenAI的API账单吓了一跳——简单的文档整理和摘要生成&#xff0c;一个月竟然消耗了…...

如何为SortableJS实现高效自动化测试:拖拽功能的完整测试指南

如何为SortableJS实现高效自动化测试&#xff1a;拖拽功能的完整测试指南 【免费下载链接】Sortable Reorderable drag-and-drop lists for modern browsers and touch devices. No jQuery or framework required. 项目地址: https://gitcode.com/gh_mirrors/so/Sortable …...

AI助力:让快马平台智能生成排列组合列举与计算一体化工具

最近在做一个数据分析项目时&#xff0c;遇到了需要批量计算排列组合的需求。传统的手动计算不仅效率低&#xff0c;还容易出错。于是我开始寻找更智能的解决方案&#xff0c;发现InsCode(快马)平台的AI辅助开发功能正好能帮我快速实现这个工具。 需求分析 排列组合在概率统计、…...

避坑指南:Python操作Word文档最常见的5个错误(python-docx实战心得)

Python-docx实战避坑指南&#xff1a;5个高频错误与解决方案 在自动化办公场景中&#xff0c;Python操作Word文档的需求日益增长&#xff0c;而python-docx库作为主流工具&#xff0c;其易用性背后隐藏着不少"暗礁"。许多开发者在基础教程阶段一帆风顺&#xff0c;却…...

COMSOL中固态锂离子电池的电-热-力耦合仿真:考虑扩散诱导应力、热应力及外部挤压应力的影响

COMSOL 固态锂离子电池仿真 固态锂离子电池电-热-力耦合仿真&#xff0c;考虑了扩散诱导应力&#xff0c;热应力以及外部挤压应力。固态电池鼓包变形的时候&#xff0c;工程师老张盯着屏幕上的应力云图直挠头。这玩意儿明明充满电就膨胀&#xff0c;放完电又缩回去&#xff0c;…...

效率提升:基于快马平台快速集成openclaw开发局域网协作工具

最近在团队协作开发中遇到了一个痛点&#xff1a;每次新成员加入局域网时&#xff0c;都需要手动配置设备信息才能互相访问&#xff0c;文件共享和实时沟通也依赖第三方工具&#xff0c;效率很低。于是尝试用openclaw结合InsCode(快马)平台快速搭建了一套本地化协作工具&#x…...

中国AI模型调用量领跑全球:成本与开源优势塑造竞争新范式

当前&#xff0c;全球人工智能&#xff08;AI&#xff09;领域的竞争正经历着深刻变革。据全球最大AI模型API聚合平台OpenRouter的最新监测数据&#xff0c;中国AI大模型的周调用量已连续数周实现对美国的稳定且显著的超越&#xff0c;并在特定时期内包揽了全球调用量排行榜的前…...

IntelliJ Conf:JetBrains Koog Java原生AI Agent框架实战

文章目录前言&#xff1a;Java程序员的"Agent焦虑"终于有解了认识Koog&#xff1a;不是又一个LangChain的Java版环境准备&#xff1a;5分钟让项目跑起来实战&#xff1a;从Hello World到智能客服第一步&#xff1a;定义工具&#xff08;Tool&#xff09;第二步&#…...