IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 使用websocketspython作服务端,unity作客服端完成网络通信 -> 正文阅读

[网络协议]使用websocketspython作服务端,unity作客服端完成网络通信

使用websockets,python作服务端,unity作客服端完成网络通信

1:python中使用websockets的建立服务器
参考文章:Python3+WebSockets实现WebSocket通信

#服务端
#coding=utf-8

import asyncio
from encodings import utf_8
from hashlib import new
import websockets
import json


# 接收客户端消息并处理
async def recv_msg(websocket):
    while True:
        # recv_text = await websocket.recv()
        # response_text = f"your submit context: {recv_text}"
        # await websocket.send(response_text)
        async for message in websocket:
            if isinstance(message,bytes):   #如果是bytes类型,则转为str
                message = message.decode()     #string,encode默认编码方式是utf-8
            print(type(message))
            print(message)
            data = json.loads(message)
            print(data['health'])
            print(data['cards'])
            new_data = json.dumps(data,ensure_ascii=False)
            await websocket.send(new_data)  #接收数据后发送回去

# 服务器端主逻辑
# websocket和path是该函数被回调时自动传过来的,不需要自己传
async def main_logic(websocket, path):
    await recv_msg(websocket)

# 把ip换成自己本地的ip 使用ipconfig.exe查看
start_server = websockets.serve(main_logic, '192.168.1.1', 8080)  
# 如果要给被回调的main_logic传递自定义参数,可使用以下形式
# 一、修改回调形式
# import functools
# start_server = websockets.serve(functools.partial(main_logic, other_param="test_value"), '10.10.6.91', 5678)
# 修改被回调函数定义,增加相应参数
# async def main_logic(websocket, path, other_param)


asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

2.unity中建立客户端,并使用自带的JsonUtility包装数据

Unity自带的JsonUtility的使用:unity 通过JsonUtility实现json数据的本地保存和读取

using System;
using System.Collections.Generic;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;

public class WebCilent : MonoBehaviour
{
    ClientWebSocket ws;
    CancellationToken ct;
    string rec_str;

    void Start()
    {
        WebSocket();
    }

	//启动客户端
    public async void WebSocket()
    {
        try
        {
            ws = new ClientWebSocket();
            ct = new CancellationToken();
            //添加header
            //ws.Options.SetRequestHeader("X-Token", "eyJhbGciOiJIUzI1N");
            Uri url = new Uri("ws://192.168.1.1:8080");  //ip使用自己电脑的,使用ipconfig.exe查看,要与服务端一致
            await ws.ConnectAsync(url, ct);

            while (true)
            {
                var result = new byte[1024];
                await ws.ReceiveAsync(new ArraySegment<byte>(result), new CancellationToken());//接受数据
                rec_str = Encoding.UTF8.GetString(result, 0, result.Length);
                Debug.Log("rec: "+ rec_str);
                if (rec_str != null)
                {
                    //解析Json
                    Person np = JsonUtility.FromJson<Person>(rec_str);
                    Debug.Log(np.health);
                    Debug.Log(np.ids[0]);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    public async void sendMsg()
    {
        Person p1 = new Person();
        p1.health = 8000;
        p1.cards = 5;
        p1.ids.Add(1);
        p1.ids.Add(2);
        string jsonStr = JsonUtility.ToJson(p1);
        Debug.Log(jsonStr);

        await ws.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes(jsonStr)), WebSocketMessageType.Binary, true, ct); //发送数据

    }


}

[Serializable]//序列化
public class Person
{
    public int health;
    public int cards;
    public List<int> ids;
    
    public Person()
    {
        ids = new List<int>();
    }
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:18:36  更:2022-01-28 12:19:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:36:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码