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

杭州网站建设技术厦门做英文网站

杭州网站建设技术,厦门做英文网站,页面设计师简历,泉州建站模板文章目录 概述TCP核心类异步机制 Unity中创建TCP客户端Unity中其它脚本获取TCP客户端接受到的数据后续改进 本文将以Unity3D应用项目作为客户端去连接制定的服务器为例进行相关说明。 Unity官网参考资料#xff1a; https://developer.unity.cn/projects/6572ea1bedbc2a001ef… 文章目录 概述TCP核心类异步机制 Unity中创建TCP客户端Unity中其它脚本获取TCP客户端接受到的数据后续改进 本文将以Unity3D应用项目作为客户端去连接制定的服务器为例进行相关说明。 Unity官网参考资料 https://developer.unity.cn/projects/6572ea1bedbc2a001ef7df52 概述 在C#中封装好了两个核心类用于TCP网络编程 TCP核心类 TcpListener 用于创建一个监听器监听客户端传入的TCP网络请求作为服务器时使用。TcpClient 该类提供客户端连接用于与服务器进行通信用于发送和接收数据作为客户端时使用。 异步机制 在Unity开发中要注意所有与网络相关的操作都应该在协程或异步任务中执行以避免阻塞UI线程。 C#中的异步操作使用async和await是配合使用的async是修饰方法X的await在被async修饰的方法里做标记标记着一条语句y主程序运行时候是逐方法逐语句的从上到下执行的当主程序执行到被async修饰的X方法的时会进入该方法里一步一步的执行语句当遇到被await标记的y语句的时分叉主语句会跳出X方法继续执行X方法下面的方法和语句。而y语句也是同时执行当执行完了会继续向下执行y语句下面的语句直到X方法结束。参加下面的代码示例 void Start() {Dosomething(); } public void Dosomething() {X_Async();Debug.Log(正常的语句异步方法外的); } public async void X_Async() {await y_等待3秒(); //这个方法会作用3秒时间Debug.Log(异步方法await后的语句); }// 上面输出的就是先输出正常的语句异步方法外的 // 过3秒在输出异步方法await后的语句。异步操作的具体说明可参见C#异步编程 Unity中创建TCP客户端 首先新建空模型Create Empty如重命名为ClientNode 其次创建一个新的脚本文件如命名为Client.cs并关联到ClientNode上 TCP客户端的主要步骤如下 a. 创建TcpClient实例 b. 异步连接到服务器tcpClient.ConnectAsync(ipaddr, port); c. 异步接受数据tcpClient.GetStream().ReadAsync(buffer, 0, buffer.Length); d. 发送数据tcpClient.GetStream().WriteAsync(data, 0, data.Length); 具体代码如下 Client.cs using System.Text; using System.Threading.Tasks; using System.Net.Sockets; using UnityEngine.Events; using UnityEngine;public class Client : MonoBehaviour {TcpClient tcpClient;//接受到新的数据事件public UnityEvent RecvContentChanged;//接受的数据长度public int RecvLen { get; private set; } 0;//接受的数据public string RecvContent { get; private set; } string.Empty;public Client() { }public Client(TcpClient client){tcpClient client;}void Start(){TcpClient client new TcpClient();//连接到本地服务器及连接端口8090对应服务器的IP和端口client.Connect(127.0.0.1, 8090);}void Update(){}//连接到指定IP服务器以及相应的端口public async void Connect(string ipaddr, int port8090){try{//异步连接到指定服务器及端口await tcpClient.ConnectAsync(ipaddr, port);Debug.Log(连接成功...);//连接成功后接受服务器数据Receive();}catch (System.Exception e){Debug.Log(e.Message);}}//接受数据public async void Receive(){try{while (tcpClient.Connected){byte[] buffer new byte[2048];//异步获取服务器数据int length await tcpClient.GetStream().ReadAsync(buffer, 0, buffer.Length);if (length 0){RecvLen length;RecvContent Encoding.UTF8.GetString(buffer);//发送新的数据以获取的事件RecvContentChanged?.Invoke();Debug.Log($接收长度{length});Debug.Log($接收内容{Encoding.UTF8.GetString(buffer)});}else //如果获取的数据长度为0则关闭连接{tcpClient.Close();}}}catch (System.Exception e){Debug.Log(e.Message);tcpClient.Close();}}//发送数据public async void Send(byte[] data){try{//异步往服务器发送数据await tcpClient.GetStream().WriteAsync(data, 0, data.Length);Debug.Log(发送成功);}catch (System.Exception e){Debug.Log(e.Message);tcpClient.Close();}}}Unity中其它脚本获取TCP客户端接受到的数据 在Client.cs的代码中可以发现有如下的代码 public UnityEvent RecvContentChanged;该语句中引入了Unity.Event它是对C#事件封装。通过绑定该事件其它脚本文件可以来获取接受到的数据。 UnityEvent 对事件的操作提供了不一样的 API //绑定 public void AddListener(UnityAction call); //调用 public void Invoke(); //解绑 public void RemoveListener(UnityAction call);1. 如何使用 首先我们在其他脚本如MainLogic.cs中创建一个函数 public void onRecvContentChanged(){string recvContent client.RecvContent;Debug.Log($Length:{client.RecvLen}, Context: {client.RecvContent});}两种方式进行绑定 方法一 代码中绑定 //MainLogic.cs public class MainLogic : MonoBehaviour {public Client client;void Start(){client new Client();client.RecvContentChanged.AddListener(onRecvContentChanged);}void Update(){}public void onRecvContentChanged(){string recvContent client.RecvContent;Debug.Log($Length:{client.RecvLen}, Context: {client.RecvContent});} }方法二Unity的Inspector中绑定 选择MainLogic关联的节点如Train将Client.cs关联到MainLogic中的Client变量选择ClientNode新建Recv Content Changed事件的响应之后将Train节点拖到Inspector指定位置如图再依次绑定到MainLogic的onRecvContentChanged函数。 后续改进 在客户端脚本Client.cs中接受数据的时候限制了接受数据长度为2048对于数据长度溢出的问题后续再来改进优化。
http://www.zqtcl.cn/news/648246/

相关文章:

  • 网站设计 原型图html购物网站模板
  • 谷歌网站推广报价国产搜什么关键词最好看
  • 婚礼网站有哪些个人做网站需要什么条件
  • 深圳企业网站seo人才招聘网站建设
  • 谷歌下载seo是什么软件
  • 个人网站设计分析小程序在线制作平台
  • 网站开发 一般用什么语言vi视觉设计案例
  • 微信公众平台官方网官网seo优化找哪家做
  • 简约 网站模板网站目录链接怎么做
  • 国内地铁建设公司网站大连做网站外包
  • 微网站营销是什么网站图片上传代码
  • 外包公司做网站多少用vs做的网站怎么打开
  • 兴义城乡建设部网站企业服务器配置方案
  • 淘宝客网站根目录wordpress调用导航代码
  • 海外免费网站推广网站开发项目报告书
  • 大气的金融网站深圳专门做兼职的网站
  • 最新网站备案四平网站公司
  • 济宁恒德建设有限公司网站互联网营销师报名入口
  • 做灯饰的企业都会在哪些网站网站排名恢复
  • 互联网公司网站建设价格跨境支付互联互通
  • 杭州 高端网站 开发宜昌建设网站公司
  • 咋样做网站快照济南建设质量协会网站
  • 学校网站怎么建设兄弟网络(西安网站建设制作公司)
  • 长春市城乡建设局网站photoshop破解版下载免费中文版
  • 吕梁网站设计天津高端网页制作
  • 建一个网站做cpa联盟做淘客的网站都有哪几个
  • 中国建设银行网站对公业务wordpress 文章归档页面
  • 东软 网站群平台建设用个人电脑做网站服务器
  • 音乐播放网站开发pc端营销网站的关键字
  • 江门网站推广宿州官方网站建设