当前位置: 首页 > 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;直接读取字符串化…...

密码学【一】

前言 在区块链的整个体系中大量使用了密码学算法&#xff0c;比如用于 PoW 的哈希算法&#xff0c;用于完整性验证的 Merkle Tree&#xff0c;用于交易签名与验证的数字签名算法&#xff0c;用于隐私保护的零知识证明等等。 可以说密码学是保证区块链安全的基石&#xff0c;而区…...

企业如何选择舆情优化处置公司?

随着互联网的发展成熟&#xff0c;网络上的信息量已经非常之巨大&#xff0c;网络上的海量信息有对企业有利的&#xff0c;其实也有一些企业经营不利的&#xff0c;让不利的信息下沉&#xff0c;让有利的信息排上搜索首页&#xff0c;这就是舆情优化的简单表述。 对于大中型企业…...

HBASE知识点

HBASE是什么&#xff1f; 高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库。利用HDFS作为其文件存储系统&#xff0c;利用MapReduce来处理HBase中的海量数据。利用Zookeeper作为其分布式协同服务。用于存储非结构化和半结构化的松散数据。 HBase数据模型 RowKey: 唯…...

Python新手入门

文章目录 概要python代码运行结果小结 概要 以下内容为python各种输出语句的语法&#xff01; python代码 # 标准化输出 print("这是标准化输出&#xff01;")# 格式化输出 print("这是第1种%s"%"格式化输出&#xff01;") print("这是第…...

vite + react + typescript + uni-app + node 开发一个生态系统

简介 使用 vite react typescript uni-app node 来开发一个简易的生态系统案例&#xff0c;包含 APP&#xff0c;H5&#xff0c;微信小程序&#xff0c;控制台&#xff0c;服务端 开发 admin 技术栈&#xff1a;vite react typescript初始化控制台项目选择自定义预设…...

python pdf文件转图片

在Python中&#xff0c;有很多的第三方库可以用于PDF文件的转换&#xff0c;比如PyPDF2和pdf2image。 其中PyPDF2可以从PDF文件中提取每一页并将其保存为图像文件&#xff0c;需要安装Pillow库。 pdf2image则直接将PDF文件转换为PNG或JPEG图像文件&#xff0c;可以使用ImageM…...

牛客: BM7 链表中环的入口结点

牛客: BM7 链表中环的入口结点 文章目录 牛客: BM7 链表中环的入口结点题目描述题解思路题解代码 题目描述 题解思路 用一个哈希表存储链表节点,遍历链表,将节点加入哈希表,如果该节点在哈希表中出现过,意味着该节点是入口节点 题解代码 package mainfunc EntryNodeOfLoop(p…...

SpringMVC系列(七)之自定义注解

目录 一. Java注解简介 1.1 Java注解分类 1.2 JDK基本注解 Override Deprecated SuppressWarnings 1.3 JDK元注解 从 Java 7 开始&#xff0c;额外添加了 3 个注解: 1.4 自定义注解 如何自定义注解&#xff1f; 二. 自定义注解示例 枚举类&#xff1a; 示例一&…...

MongoDB的搭建 和crud操作

MongoDB docker 下载 docker run --restartalways -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6使用navcat工具使用MongoDB Crud操作 jar包 <dependency><groupId>org.projectlombok</groupId><artifactId>lom…...

软件设计师考试学习1

前言 计算机组成原理及体系结构 数据的表示 进制的转换 原码反码补码移码 最高位是符号位&#xff0c;负数符号位为1 反码补码正数和原码一样&#xff0c;负数有区别 反码符号位不动&#xff0c;其他位置取反 补码在反码基础上加1 移码是将补码的符号为取反 在原码和反码中…...

福建自适应网站建设/北京seo案例

当我们去github上克隆代码仓库的时候&#xff0c;一般有两种选择&#xff0c;一种是https协议&#xff0c;一种是ssh协议。这也是最常用的两种协议了。 HTTPS协议&#xff08;推荐&#xff09; 优点&#xff1a; 对新手友好&#xff0c;使用简单&#xff0c;clone的时候只需…...

无锡做网站服务/chrome下载

1鼠标快捷键,鼠标附加键,鼠标功能键[中关村在线键鼠频道原创]鼠标发展到今天&#xff0c;集成了不少的功能&#xff0c;也为用户在实际生活中提供了相对应的便利作用&#xff0c;例如通过改变鼠标的外观形状来增大产品的适用性&#xff0c;以迎合不同人群的使用需要&#xff0c…...

广州建设教育网站/百度服务电话6988

1,assert宠 包含文件&#xff1a;<assert.h> 原型&#xff1a;void assert(int expression) ; 如果expression为假(0),向stderr打印一条出错信息,然后调用函数abort 来终止程序. 在开发阶段通过在<assert.h>的包含语句前插入#define NDEBUG来禁用asset. #include &…...

网站建设哪家公司靠谱/it行业培训机构哪个好

Collection和Collections有什么区别&#xff1f; Collections &#xff08;1&#xff09;是一个工具类&#xff0c;提供了大量处理容器的方法。 &#xff08;2&#xff09;它包含有各种有关集合操作的静态多态方法 &#xff08;3&#xff09;不能实例化&#xff0c;可用于对集…...

自建房平面图设计软件/360优化大师安卓手机版下载安装

关于 Java 中引入的 Checked Exceptions&#xff0c;目前存在着很多反对意见。正方的观点是引入 Checked Exceptions&#xff0c;可以增加程度的鲁棒性。反方的观点是 Checked Exceptions 很少被开发人员正确使用过&#xff0c;并且降低了程序开发的生产率和代码的执行效率。 正…...

wordpress多个主页/便宜的seo网络营销推广

JS HTML DOM方法HTML DOM方法是可以对HTML元素执行的操作。HTML DOM属性是可以设置或更改的HTML元素的值。DOM编程接口可以使用JavaScript(和其他编程语言)访问HTML DOM。在DOM中&#xff0c;所有HTML元素都定义为objects。编程接口是每个对象的属性和方法。一个属性是一个值&a…...