当前位置: 首页 > 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,现在可以统一了。

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

相关文章:

  • SpringCloud微服务实战——搭建企业级开发框架(四十九):数据字典注解的设计与实现
  • mysql下,实现保存指定用户、ip、命令的查询日志
  • Vue 3.0 学习笔记之基础知识
  • WebGIS行政区炫酷特效——流光特效教程
  • 2023-3-3 刷题情况
  • 《青浦区加快发展跨境电子商务实施细则(审议稿)》
  • 【React全家桶】React生命周期
  • B. Count the Number of Pairs
  • 离线数据仓库项目--技术选择
  • GC Garbage Collectors
  • 【网络】-- 网络基础
  • 二、Redis安装配置(云服务器、vmware本地虚拟机)
  • 【学习Docker(七)】详细讲解Jenkins部署SpringCloud微服务项目,Docker-compose启动
  • 时机将至,名创优品或将再掀起一波消费热浪
  • 深圳大学计软《面向对象的程序设计》实验8 静态与友元
  • 【基础算法】单链表的OJ练习(2) # 链表的中间结点 # 链表中倒数第k个结点 #
  • vue路由文件拆分管理
  • 实例解析Java反射
  • Android 9适配经验总结
  • 定时任务调度方案——Xxl-Job
  • 操作系统引导
  • [C#] 多线程单例子,分为阻塞型和分阻塞型, 在unity里的应用
  • 使用MAT进行内存分析,并找到OOM问题
  • 初识Python
  • tmux终端复用软件
  • IO详解(文件,流对象,一些练习)
  • SpringCloud全家桶— — 【1】eureka、ribbon、nacos、feign、gateway
  • 【线程安全篇】
  • 错误:EfficientDet网络出现“No boxes to NMS“并且mAP:0.0的解决方案
  • python的opencv操作记录13——区域生长及分水岭算法