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

wordpress的第三方登录插件重庆的seo服务公司

wordpress的第三方登录插件,重庆的seo服务公司,营销方案范文,安逸花借款app下载安装文章目录 概述TCP核心类异步机制 Unity中创建TCP客户端Unity中其它脚本获取TCP客户端接受到的数据后续改进 本文将以Unity3D应用项目作为客户端去连接制定的服务器为例进行相关说明。 Unity官网参考资料: 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 port=8090){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中绑定

  1. 选择MainLogic关联的节点(如Train),将Client.cs关联到MainLogic中的Client变量在这里插入图片描述
  2. 选择ClientNode,新建(+)Recv Content Changed事件的响应,之后将Train节点拖到Inspector指定位置(如图),再依次绑定到MainLogic的onRecvContentChanged函数。
    在这里插入图片描述

后续改进

在客户端脚本Client.cs中,接受数据的时候限制了接受数据长度为2048,对于数据长度溢出的问题,后续再来改进优化。

http://www.yayakq.cn/news/456964/

相关文章:

  • 做游戏模板下载网站餐饮营销手段13种手段
  • 网站的后期维护自己怎么做网站源码完整
  • 乐清市做淘宝网站公司用订制音乐网站做的音乐算原创吗
  • 河南安阳网站建设芜湖做网站都有哪些
  • 网站副标题wordpress换ip 撞库 Wordpress
  • 阿里云怎样做公司网站电子商务网站的管理
  • 做网站常用的英文字体做外贸自己的公司网站
  • 建网站需要了解哪些网站建设知识开发网站建设方案
  • 优站点网址收录网wordpress 新建文章
  • 京东网站网站建设是什么现在开网站做微商赚钱吗
  • 网站开发相关书籍资料杭州哪家公司做网站好
  • 济源制作网站wordpress 文章 代码
  • 织梦cms做网站流程wordpress安装在哪里
  • 南京网站推广排名wordpress+伪静态+403
  • 环保网站模板潍坊哪家网站制作公司好
  • 有人做几个蝎子养殖门户网站网站关键字代码
  • 南昌制作手机网站抖音开放平台工会
  • 潍坊网站建设壹品网络301重定向手机网站
  • 找工作哪个网站好找详情页设计模板网站
  • 丹阳做网站的公司优质友情链接
  • 百度网站站长工具wordpress图片外链
  • 做网站前台需要什么软件Joomla外贸网站模板
  • 网站跟app的区别是什么意思新站seo快速排名 排名
  • 搭建网站一个服务器和域名it培训班大概需要多少钱
  • 柳州本地做网站的公司网站开发 ide
  • 怎样自己做淘宝客网站孝感市建设网站
  • 大型小说网站开发语言wordpress远程自动下载图片
  • wordpress编辑器插件广西网站推广优化
  • 做刷单哪个网站找小白青岛建设网站企业
  • 建设公司网站多少钱安徽电子健康卡小程序