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

Unity使用webSocket与服务器通信(一)搭建一个简单地服务器和客户端

你想在unity WebGL里面使用TCP通信吗,那么你可以用一用webSocket。当然,桌面端也可以使用webSocket,这样Unity多平台发布的时候,业务层的通信代码可以使用一套,而不是桌面用socket,网页用http…

一、什么是webSocket?

顾名思义,它就是web版的socket?那什么是socket呢?…

二、Unity中webSocket相关的包有哪些?

endel/NativeWebSocket
项目链接

在这里插入图片描述

在这里插入图片描述

三、Unity客户端的实现

  • 联网演示
    请添加图片描述

  • 绑定脚本
    在这里插入图片描述

  • 代码清单
    代码来自NativeWebSocket官网demo,略作修改

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using NativeWebSocket;public class Connection : MonoBehaviour
{WebSocket websocket;public Text textLog;// Start is called before the first frame updateasync void Start(){websocket = new WebSocket("ws://192.168.0.146:8081");websocket.OnOpen += () =>{Debug.Log("Connection open!");textLog.text = $"Connection open! {Time.realtimeSinceStartup} \n {textLog.text}";};websocket.OnError += (e) =>{Debug.Log("Error! " + e);textLog.text = $"Error:{e} {Time.realtimeSinceStartup} \n {textLog.text}";};websocket.OnClose += (e) =>{Debug.Log("Connection closed!");textLog.text = $"Connection closed! {Time.realtimeSinceStartup} \n {textLog.text}";};websocket.OnMessage += (bytes) =>{Debug.Log("OnMessage!");textLog.text = $"OnMessage! {Time.realtimeSinceStartup} \n {textLog.text}";Debug.Log(bytes);// getting the message as a stringvar message = System.Text.Encoding.UTF8.GetString(bytes);textLog.text = $"消息内容:{message} {Time.realtimeSinceStartup} \n {textLog.text}";//Debug.Log("OnMessage! " + message);};// Keep sending messages at every 0.3sInvokeRepeating("SendWebSocketMessage", 0.0f, 0.3f);// waiting for messagesawait websocket.Connect();}void Update(){
#if !UNITY_WEBGL || UNITY_EDITORwebsocket.DispatchMessageQueue();
#endif}async void SendWebSocketMessage(){if (websocket.State == WebSocketState.Open){// Sending bytesawait websocket.Send(new byte[] { 10, 20, 30 });// Sending plain textawait websocket.SendText("plain text message");}}private async void OnApplicationQuit(){await websocket.Close();}}

四、服务端的实现(C# WinForm)

在这里插入图片描述
请添加图片描述

1、服务器端用到的包

在这里插入图片描述
在这里插入图片描述

github链接

2、主要代码

代码来自官网Demo,略有修改

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Fleck;namespace WinFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){var server = new WebSocketServer("ws://192.168.0.146:8081");  //ws://localhost:8081    ws://127.0.0.0:8181server.Start(socket =>{socket.OnOpen = () =>{Debug.WriteLine($"有新用户连入:{socket.ConnectionInfo.ClientIpAddress}");};socket.OnClose = () =>{Debug.WriteLine($"用户断开连接:{socket.ConnectionInfo.ClientIpAddress}");};socket.OnMessage = message =>{socket.Send($"服务器收到消息 : {DateTime.Now.ToString()}");Debug.WriteLine($"收到一条消息,来自:{socket.ConnectionInfo.ClientIpAddress}");};});Debug.WriteLine("服务器已经启动!");}}
}

五、客户端的WebGL和Win 桌面测试

桌面和webGL都没问题、这样,可以一套代码打天下。
以前用socket在桌面(包括一体头盔),在web端只能用http,现在可以统一了。

相关文章:

Unity使用webSocket与服务器通信(一)搭建一个简单地服务器和客户端

你想在unity WebGL里面使用TCP通信吗,那么你可以用一用webSocket。当然,桌面端也可以使用webSocket,这样Unity多平台发布的时候,业务层的通信代码可以使用一套,而不是桌面用socket,网页用http… 一、什么是…...

SpringCloud微服务实战——搭建企业级开发框架(四十九):数据字典注解的设计与实现

数据字典是系统中基本的必不可少的功能,在多种多样的系统中,数据字典表的设计都大同小异。但是使用方式确是多种多样,设计好一套易用的数据字典功能模块,可以使开发事半功倍。 常用的数据字典使用方式: 直接在SQL语句…...

mysql下,实现保存指定用户、ip、命令的查询日志

环境:mysql 8.0.14 社区版 阅读文本需要的背景知识:对数据库的基本概念(触发器、存储过程、事件),mysql下general log的配置指令 背景:因审计需要,对于数据库操作需要留痕。实际访问数据库的有…...

Vue 3.0 学习笔记之基础知识

系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录系列文章目录前言Vue 3.0 创建与Vue2.0对比的变化关闭语法检查setup 组合式函数compositions响应式数据 refreactive 函数Vue3.0 响应原理ref 和 reactive 区别setup 注意点computed 计算函数watch…...

WebGIS行政区炫酷特效——流光特效教程

先来看下效果: 图片截图: 流光特效的思路是从行政区的边界中随着时间不断的取若干段线条换成另一种高亮颜色。 流光的第一步首先是发光,发光的教程在这里: GIS矢量图形多边形地块行政区发光,阴影发光特效实现_疯狂的GISer的博客-CSDN博客 学会发光以后,接下来需要做的…...

2023-3-3 刷题情况

保证文件名唯一 题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用&#xf…...

《青浦区加快发展跨境电子商务实施细则(审议稿)》

为进一步贯彻落实《中华人民共和国电子商务法》,上海市《关于促进本市跨境电子商务发展的若干意见》,切实做好青浦区跨境电子商务试点工作,探索和规范跨境电子商务管理,促进跨境电子商务健康快速发展,青浦商务委根据多…...

【React全家桶】React生命周期

React生命周期 1、初始化阶段 componentDidMount:render之前最后一次修改状态的机会 render:只能访问this.props和this.state,不允许修改状态和DOM输出 componentDidMount:成功render并渲染完成真实DOM之后触发 2、旧生命周期 👉👉👉加…...

B. Count the Number of Pairs

原题链接 纯纯水一下; 昨天晚上的比赛,由于半夜打的,精神状态不好,wa了俩发直接睡觉去了,现在白天写写发现,不难,水中水 模拟题吧,题目怎么说就这么作 Kristina has a string ss…...

离线数据仓库项目--技术选择

文章目录(一)技术选型1)数据采集工具2)数据存储3)数据计算4)数据可视化(二)整体架构设计(三)服务器资源规划(一)技术选型 1&#xff…...

GC Garbage Collectors

本质一、算法1、哪些是垃圾?引用计数法:reference countPython中使用了。个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。漏洞:循环…...

【网络】-- 网络基础

(本文是网络的宏观的概念铺垫) 目录 计算机网络背景 网络发展 认识 "协议" 网络协议初识 协议分层 OSI七层模型 TCP/IP 五层(或四层)模型 报头 以太网 碰撞 路由器 IP地址和MAC地址 IP地址与MAC地址总结 IP地址 MAC地址 计算机…...

二、Redis安装配置(云服务器、vmware本地虚拟机)

一、自己购买服务器 自己购买阿里云、青牛云、腾讯云或华为云服务器, 自带CentoOS或者Ubuntu环境,直接开干 二、Vmware本地虚拟机安装 1、VMWare虚拟机的安装,不讲解,默认懂 2、如何查看自己的linux是32位还是64位 getconf L…...

【学习Docker(七)】详细讲解Jenkins部署SpringCloud微服务项目,Docker-compose启动

Jenkins部署SpringCloud微服务项目,Docker-compose启动 座右铭:《坚持有效输出,创造价值无限》 本文介绍使用Jenkins部署SpringCloud微服务项目,Docker-compose启动。 之前写过安装Jenkins的过程,这里就不写安装细节了…...

时机将至,名创优品或将再掀起一波消费热浪

北京时间2月28日,名创优品发布2023财年中报,财报显示,2023财年第二季度营收规模有所收窄,但净利润、毛利率、门店数量均实现了不错的增长,总体表现可圈可点。 (资料来源:富途牛牛) …...

深圳大学计软《面向对象的程序设计》实验8 静态与友元

A. 旅馆旅客管理(静态成员) 题目描述 编写程序,实现某旅馆的客人住宿记录功能。 定义一个Customer类,要求输入客人的姓名,创建一个Customer对象。类声明如下: 调用类的Display函数输出客人ID&#xff…...

【基础算法】单链表的OJ练习(2) # 链表的中间结点 # 链表中倒数第k个结点 #

文章目录前言链表的中间结点链表中倒数第k个结点写在最后前言 对于单链表的OJ练习&#xff0c;需要深刻理解做题的思路&#xff0c;这样我们才能够在任何场景都能够熟练的解答有关链表的问题。 关于OJ练习&#xff08;1&#xff09;&#xff1a;-> 传送门 <-&#xff0c…...

vue路由文件拆分管理

随着项目的原来越大&#xff0c;路由越来越多&#xff0c;我们的路由也会越来越多&#xff0c;如果都集中在一个文件中&#xff0c;会很冗杂文件很长。这时候我们可以将路由文件拆分&#xff0c;可读、方便管理。多人合作添加路由也能更多的避免代码冲突 代码拆分目录如图&…...

实例解析Java反射

反射是大多数语言里都必不不可少的组成部分&#xff0c;对象可以通过反射获取他的类&#xff0c;类可以通过反射拿到所有方法&#xff08;包括私有&#xff09;&#xff0c;拿到的方法可以调用&#xff0c;总之通过“反射”&#xff0c;我们可以将Java这种静态语言附加上动态特…...

Android 9适配经验总结

目录四大组件适配Activity启动方式适配Service启动方式适配前台服务需要添加权限限制静态广播的接收限制ContentResolver数据更新操作权限与安全相关主要适配点运行时动态权限申请默认不支持 http 请求SharedPreferences 适配四大组件适配 Android 应用的开发离不开 Android 四…...

定时任务调度方案——Xxl-Job

定时任务调度方案 随着系统规模的发展&#xff0c;项目的组织结构以及架构越来越复杂&#xff0c;业务覆盖的范围越来越广&#xff0c;定时任务数量日益增多&#xff0c;任务也变得越来越复杂&#xff0c;尤其是为了满足在用户体量日历增大时&#xff0c;系统能够稳定运行&…...

操作系统引导

操作系统是一种程序&#xff0c;程序以数据的形式存放在硬盘中&#xff0c;而硬盘通常分为多个区&#xff0c;一个计算机中又有多个或多种外部设备。 操作系统引导指的是计算机利用CPU运行特定程序&#xff0c;通过程序识别硬盘&#xff0c;识别硬盘分区&#xff0c;识别硬盘分…...

[C#] 多线程单例子,分为阻塞型和分阻塞型, 在unity里的应用

在单例中使用多线程时&#xff0c;需要注意以下几点&#xff1a; 线程安全&#xff1a;在多线程环境下&#xff0c;单例对象可能被多个线程同时访问&#xff0c;因此需要确保单例的线程安全&#xff0c;避免出现数据竞争等问题。 对象创建&#xff1a;如果在单例对象的构造函数…...

使用MAT进行内存分析,并找到OOM问题

前言 在处理一次现场问题时&#xff0c;发现服务还在运行&#xff0c;但是出现假死情况&#xff0c;后通过分析GC日志以及使用MAT分析确定问题是内存溢出OutOfMemery(OOM)&#xff1b;这里只记录MAT分析学习过程,最近工作忙&#xff0c;补记录。 GC日志分析 首先&#xff0c;如…...

初识Python

目录初识Python1.Python简介Python的优缺点Python的应用领域2.安装Python解释器Windows环境Linux环境macOS环境3.运行Python程序确认Python的版本编写Python源代码运行程序代码中的注释4.Python开发工具IDLE - 自带的集成开发工具IPython - 更好的交互式编程工具Sublime Text -…...

tmux终端复用软件

一、安装[rootpool-100-1-1-159 test]# yum install tmux [rootpool-100-1-1-159 test]# yum search tmux Repository extras is listed more than once in the configuration Last metadata expiration check: 0:33:52 ago on Fri 03 Mar 2023 09:10:34 AM CST.Name Exactly M…...

IO详解(文件,流对象,一些练习)

目录 文件 文件概念 文件的路径 路径有俩种表示风格 文件类型 如何区分文本文件还是二进制文件? java对文件的操作 File类中的一些方法 流对象 流对象的简单概念 java标准库的流对象 1.字节流,(操作二进制数据的) 2.字符流 (操作文本数据的) 流对象最核心的四个…...

SpringCloud全家桶— — 【1】eureka、ribbon、nacos、feign、gateway

SpringCloud全家桶— — 组件搭建 1 Eureka 1.1 Eureka-server 创建eureka-server的SpringBoot项目 ①导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId…...

【线程安全篇】

线程安全之原子性问题 x &#xff0c;在字节码文件中对应多个指令&#xff0c;多个线程在运行多个指令时&#xff0c;就存在原子性、可见性问题 赋值 多线程场景下&#xff0c;一个指令如果包含多个字节码指令&#xff0c;那么就不再是原子操作。因为赋值的同时&#xff0c…...

错误:EfficientDet网络出现“No boxes to NMS“并且mAP:0.0的解决方案

近日&#xff0c;在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候&#xff0c;出现了如下错误&#xff1a; 其中项目开源地址是&#xff1a;https://github.com/toandaominh1997/EfficientDet.Pytorch 上面截图中的1和2代表我的类别名称。读者可…...

新手怎么搭建网站/现在如何进行网上推广

ueditor以下错误&#xff1a; ““/”应用程序中的服务器错误。 -------------------------------------------------------------------------------- 未能执行 URL。 说明: 执行当前 Web 请求期间&#xff0c;出现未处理的异常。请检查堆栈跟踪信息&#xff0c;以了解有关该…...

网站建设与制作实训报告/全球搜索

本文的主要讲述的是在PHP中调用MySQL数据库的基本操作代码以及解释&#xff0c;具有一定的参考价值&#xff0c;有需要的朋友一定要好好看看&#xff01;PHP-MySQL基本操作<?php // 1.防止页面中文乱码header("content-type:text/html;charsetutf-8");// 链接数据…...

网站无域名注册人id/加盟培训机构

1、次数分配数列是&#xff08;&#xff09;。&#xff08;2 分&#xff09; A&#xff0e;按数量标志分组形成的数列 B&#xff0e;按品质标志分组形成的数列 C&#xff0e;按统计指标分组所形成的数列 D&#xff0e;按数量标志和品质标志分组所形成的数列 2、下列指标中属于时…...

网站建设的流程图示/淘宝站外引流推广方法

重构学习笔记1. 封装集合                                                    概念&#xff1a;本文所讲的封装集合就是把集合进行封装&#xff0c;只提供调用端需要的接口。 正文&#xff1a;在很多时候&#xff0c;我们…...

网站信息内容建设实施办法/北京昨天出啥大事了

资料来源 https://opensource.com/alternatives/gmail本文是对原文翻译&#xff0c;在调试 privmx 时么有成功&#xff0c;这些代码大多用于 php5 &#xff0c;对PHP7 不兼容。相关资料 https://www.oschina.net/news/66088/open-source-alternatives-gmailhttps://webmail.…...

网站开发 . 漫游指南/企业培训课程名称大全

目录 贝叶斯定理 贝叶斯分类 朴素贝叶斯分类器 贝叶斯网络 VS 朴素贝叶斯 贝叶斯网络 条件概率表集合 贝叶斯网络的构造…...