Unity使用webSocket与服务器通信(一)搭建一个简单地服务器和客户端
创始人
2025-01-20 10:04:05
0

你想在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 update     async 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 string             var 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.3s         InvokeRepeating("SendWebSocketMessage", 0.0f, 0.3f);          // waiting for messages         await websocket.Connect();     }      void Update()     { #if !UNITY_WEBGL || UNITY_EDITOR         websocket.DispatchMessageQueue(); #endif     }      async void SendWebSocketMessage()     {         if (websocket.State == WebSocketState.Open)         {             // Sending bytes             await websocket.Send(new byte[] { 10, 20, 30 });              // Sending plain text             await 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:8181             server.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,现在可以统一了。

相关内容

热门资讯

解密了解!广西老友辅助是真的吗... 解密了解!广西老友辅助是真的吗(辅助)天天竞技总是是有辅助脚本(哔哩哔哩)1、让任何用户在无需广西老...
有挂了解!潮汕汇鱼虾蟹辅助(辅... 有挂了解!潮汕汇鱼虾蟹辅助(辅助)琼雀二七王好像真的是有辅助平台(哔哩哔哩)1.潮汕汇鱼虾蟹辅助 选...
开挂了解!创思维激k透视软件(... 开挂了解!创思维激k透视软件(辅助)众娱麻将果然存在有辅助平台(哔哩哔哩)1、该软件可以轻松地帮助玩...
有挂了解!圣游辅助软件(辅助)... 有挂了解!圣游辅助软件(辅助)友友麻将总是真的有辅助平台(哔哩哔哩)1、许多玩家不知道圣游辅助软件辅...
开挂了解!边锋辅助工具(辅助)... 开挂了解!边锋辅助工具(辅助)大亨pro切实是有辅助工具(哔哩哔哩)进入游戏-大厅左侧-新手福利-激...
科普了解!微信小程序有挂吗辅助... 科普了解!微信小程序有挂吗辅助(辅助)金沙娱乐场其实存在有辅助下载(哔哩哔哩)所有人都在同一条线上,...
了解了解!兴动互娱有辅助吗(辅... 了解了解!兴动互娱有辅助吗(辅助)喜喜斗地主竟然存在有辅助app(哔哩哔哩)1、打开软件启动之后找到...
开挂了解!传送屋辅助k(辅助)... 开挂了解!传送屋辅助k(辅助)微乐南昌麻将一贯是有辅助器(哔哩哔哩)1、金币登录送、破产送、升级送、...
科普了解!聚友联盟辅助器(辅助... 科普了解!聚友联盟辅助器(辅助)开心跑胡子一贯是真的辅助神器(哔哩哔哩)亲,关键说明,聚友联盟辅助器...
详细了解!浙江游戏大厅自建房间... 详细了解!浙江游戏大厅自建房间(辅助)开云体育总是是真的辅助下载(哔哩哔哩)1.浙江游戏大厅自建房间...