Unity使用webSocket与服务器通信(三)——C#服务端(Fleck)与Unity客户端( NativeWebSocket)传输多种数据数据

本文详细介绍了Unity使用NativeWebSocket与服务端Fleck进行WebSocket通信的过程,包括传输字符串、二进制数据(如文件),以及数据格式的约定。客户端发送信息包括JSON序列化、字符串指令和二进制文件,同时展示了接收数据和处理下载请求的异步方法。此外,还展示了客户端和服务器端的主要事件绑定。

一、通信时会传输哪些内容

  • 1、字符串数据
    简单的字符串:比如登录请求信息,登录结果返回的信息。
    用json系列化的字符串:比如上传一个表到服务器,让它写入到数据库中。
    读取文件的时候,读取的是string内容。

  • 2、二进制数据
    比如传输的是文件:例如myword.doc,myexcel.xls或者是assetboundle文件。
    比如上传实验报告,生成实验报告并下载等。
    读取文件的时候,直接读取字节码。

二、Unity(NativeWebSocket)和服务端(Fleck)怎么约定要传输的数据格式

在这里插入图片描述

1、Unity(NativeWebSocket)发送和接收信息的API有哪些?

  • 发送字符串
    SendText(string message)
  • 发送二进制
    Send(byte[] bytes)
  • 接收字符串【无】
    OnMessage(string : msg)
  • 接收二进制
    OnMessage(bytes : byte[])

2、服务器发送string和byte[]给Unity时,Unity如何处理?

  • Fleck发送string,使用Send(message:string)
  • Fleck发送二进制,使用Send(bytes:byte[])
  • Unity客户端统一使用OnMessage(bytes : byte[])进行数据的接收
    Unity需要识别这个包是什么内容:字符串指令,系列化的json字符串,不同种类的二进制文件…等等!

3、传输的数据格式

在这里插入图片描述

4、服务器和客户端信息来往说明

在这里插入图片描述

5、接收和发送的关键部分

(1)、客服端发送信息

  • 发送json文件到服务器
var jsonString = JsonUtility.ToJson(myScores); //myScores 预先定义的得分信息
websocket.SendText($"JSONSCOR{
     
     jsonString}");
  • 发送字符串指令到服务器
/// <summary>
/// 命令字符串
/// </summary>
/// <param name="text">命令字符串</param>
/// <returns></returns>
public async UniTask SendCommand(string cmdText)
{
   
   
    //传输时自动在前面添加[COMD]
    var msg = $"COMD{
     
     cmdText}";
    await websocket.SendText(msg);
}
  • 发送二进制文件到服务器
/// <summary>
/// 发送文件
/// </summary>
/// <param name="file">file.extend</param>
/// <param name="data">byte[]数据</param>
/// <returns>成功与否</returns>
public async UniTask<bool> SendBinary(string fileName,byte[] data)
{
   
   
    Debug.Log($"即将发送数据:{
     
     fileName} {
     
     data.Length}");
    var rtn = false;
    if (fileName.Length > 30)
    {
   
   
        Debug.Log("文件名不能超过30个字符");
        rtn = false;
    }
    else
    {
   
   
        var head = Encoding.UTF8.GetBytes("BINA");                         
        var fileNameBytes = Encoding.UTF8.GetBytes(fileName.PadRight(30)); 
        var allData = new List<byte>();                                         
        allData.AddRange(head);             //头
        allData.AddRange(fileNameBytes);    //文件名称
        allData.AddRange(data);             //文件数据
        await websocket.Send(allData.ToArray());
        rtn = true;
    }
    return true
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值