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

网站建设 柳州网络推广网站排行榜

网站建设 柳州,网络推广网站排行榜,工艺品做网站,技术支持 东莞网站建设机械加工概述 在现代多人在线游戏中,稳定且高效的网络通信是确保游戏体验的关键。本文将探讨如何利用C#开源网络通信库PESocket来构建一个简单的Unity客户端与.NET控制台服务器之间的实时消息传递系统。通过本例,读者不仅能够了解PESocket的基本用法&#xff0c…

概述

在现代多人在线游戏中,稳定且高效的网络通信是确保游戏体验的关键。本文将探讨如何利用C#开源网络通信库PESocket来构建一个简单的Unity客户端与.NET控制台服务器之间的实时消息传递系统。通过本例,读者不仅能够了解PESocket的基本用法,还将学到一些关于设计跨平台网络应用程序的最佳实践。

1. PESocket简介

PESocket开源项目GitHub地址:点击跳转

博客地址:C#开源网络通信库PESocket的使用 - PlaneZhong - 博客园 (cnblogs.com)

PESocket是一个轻量级、易于使用的网络通信框架,特别适合于快速原型制作和小规模项目。它基于Socket编程模型,并提供了简洁的API以简化异步数据传输过程。

不用过多了解网络通信内部原理,只需几行简单的代码,便能简捷快速开发基于C#语言的服务器和客户端,实现网络通信。

2. 序列化与反序列化

为了在网络间安全高效地传输复杂对象,PESocket采用了自定义的序列化机制。这使得任何实现了ISerializable接口或标记了[Serializable]属性的数据结构都可以被直接打包成二进制流发送出去,到达目的地后再恢复为原始形式。

3. 会话管理

每个连接到服务器的客户端都由一个独立的PESession实例代表,负责处理所有相关的输入输出操作。这种一对一的关系有助于实现更细粒度的安全控制及错误处理策略。

4. 日志记录

良好的日志记录习惯对于调试和维护网络应用至关重要。PESocket内置了一套强大的日志系统,可以根据不同级别(如信息、警告、错误等)记录详细的运行时状态变化。

开发步骤

第一步:设置项目环境

  • 创建一个新的Unity项目作为客户端。
  • 新建一个标准的.NET控制台应用程序充当服务器角色。
  • 在两个项目中分别导入PESocket引用

    网络协议必须要去继承自PESocket里的PEMsg
    服务器里PESocket 放在网络模块
    将协议里原来的引用都删除-添加引用-找到之前生成的PESocket.dll
    将原来服务器里的引用都删除-添加引用-直接引用协议项目

第二步:定义通信协议

服务器需要与客户端进行通信,需要一个网络协议(类库)

首先,我们需要定义一个共享的消息类,用于封装待交换的信息。此例中我们仅包含了一个字符串字段text,但根据实际需求可以扩展更多属性。

// NetMsg.cs
using PENet;
using System;namespace PEProtocal
{[Serializable]public class NetMsg : PEMsg{public string text;}public class IPCfg{public const string srvIP = "127.0.0.1";public const int srvPort = 17666;}
}

第三步:编写服务器端代码

接下来创建服务器逻辑,包括初始化监听器以及处理来自远程主机的各种事件。

有了ip端口信息就可以在服务器(ServerStart)里生成一个PESocket

但由于PESocket需要有一个进行网络通信的Session,并且这个Session需要继承自PESession

在服务器下创建一个session(类):ServerSession

ServerSession负责与客户端进行连接
连接后需做
1.建立连接时需要有一个反馈
2.收到数据时对数据进行处理
3.断开连接时打出一个反馈日志

using Protocal;
using PENet;/// <summary>
/// ServerSession负责与客户端进行连接
/// </summary>
public class ServerSession:PESession<NetMsg>//PESession需要传入网络消息的类
{//建立连接protected override void OnConnected(){PETool.LogMsg("Client Connect");//PESocket里封装好的方法SendMsg(new NetMsg{text = "Welcome to connect."});}//收到数据protected override void OnReciveMsg(NetMsg msg){PETool.LogMsg("Client Req:" + msg.text);SendMsg(new NetMsg{text = "SrvRsp:" + msg.text});}//断开连接protected override void OnDisConnected(){PETool.LogMsg("Client DisConnect");}}

在服务器端,ServerStart 类是整个应用的入口点。它负责初始化网络通信服务,并保持服务器运行状态以便持续监听来自客户端的连接请求。 

using PENet;
using Protocal;/// <summary>
/// 服务器
/// </summary>
namespace Server
{class ServerStart{static void Main(string[] args){//需要一个进行网络通信的Session,并且这个Session需要继承自PESession,还有一个网络消息的类(协议)PESocket<ServerSession, NetMsg> server = new PESocket<ServerSession, NetMsg>();server.StartAsServer(IPCfg.srvIP, IPCfg.srvPort);//需要传递的ip和端口while (true){/* Keep the application running */}}}
}

第四步:配置Unity客户端

现在转向Unity工程,在MonoBehaviour脚本中添加必要的逻辑以便建立与远端服务的链接并发送/接收文本消息。

将协议工程导出(给客户端使用)
属性-生成 更改路径 生成-重新生成解决方案
unity里直接导入PESocket与协议dll
客户端也需要一个Session

Session 用来和客户端进行连接,每个客户端对应一个session(只用关联自己),服务器对应多个客户端(有多个session)  

using PENet;
using Protocal;
using UnityEngine;public class ClientSession:PESession<NetMsg>
{//建立连接protected override void OnConnected(){//PETool.LogMsg("Server Connect");//PESocket里封装好的方法,在控制台输出Debug.Log("Server Connect");}//收到数据protected override void OnReciveMsg(NetMsg msg){//PETool.LogMsg("Server Rsp:" + msg.text);Debug.Log("Server Rsp:" + msg.text);}//断开连接protected override void OnDisConnected(){//PETool.LogMsg("Server DisConnect");Debug.Log("Server DisConnect");}
}

GameStart 类,用于管理游戏对象的行为逻辑。这个脚本主要关注于建立与服务器的连接、配置日志记录以及处理用户输入以发送消息给服务器。

using UnityEngine;
using Protocal;public class GameStart : MonoBehaviour
{PENet.PESocket<ClientSession, NetMsg> client = null;private void Start(){client = new PENet.PESocket<ClientSession, NetMsg>();client.StartAsClient(IPCfg.srvIP, IPCfg.srvPort);//启动客户端//指定一个日志的接口,可以把PESocket里的日志通过unity控制台打印;//(日志是否开启,日志的回调函数(内容,日志的级别(?)))client.SetLog(true, (string msg, int lv) =>{switch (lv)//对不同的日志级别显示不同的提示{case 0:msg = "Log:" + msg;Debug.Log(msg);break;case 1://警告msg = "Warn:" + msg;Debug.Log(msg);break;case 2://错误msg = "Error:" + msg;Debug.Log(msg);break;case 3://普通信息msg = "Info:" + msg;Debug.Log(msg);break;}});}private void Update(){if (Input.GetKeyDown(KeyCode.Space)){client.session.SendMsg(new NetMsg { text = "Hello Unity" });}}
}


文章转载自:
http://nephrolithotomy.c7630.cn
http://cerebric.c7630.cn
http://lyreflower.c7630.cn
http://hebraise.c7630.cn
http://taffrail.c7630.cn
http://rose.c7630.cn
http://commuter.c7630.cn
http://accouchement.c7630.cn
http://congruent.c7630.cn
http://bibliopoly.c7630.cn
http://medially.c7630.cn
http://fleech.c7630.cn
http://ionosonde.c7630.cn
http://ootheca.c7630.cn
http://logistic.c7630.cn
http://wo.c7630.cn
http://centrosymmetric.c7630.cn
http://exedra.c7630.cn
http://magpie.c7630.cn
http://yellowbark.c7630.cn
http://excusatory.c7630.cn
http://waster.c7630.cn
http://plasm.c7630.cn
http://kootenai.c7630.cn
http://sowens.c7630.cn
http://rainworm.c7630.cn
http://unfailing.c7630.cn
http://hereinbelow.c7630.cn
http://dob.c7630.cn
http://entamoeba.c7630.cn
http://aganippe.c7630.cn
http://fertilisation.c7630.cn
http://cbc.c7630.cn
http://datum.c7630.cn
http://thermidorean.c7630.cn
http://clerihew.c7630.cn
http://bedtime.c7630.cn
http://newsstand.c7630.cn
http://monasterial.c7630.cn
http://lisbon.c7630.cn
http://numbering.c7630.cn
http://supplicate.c7630.cn
http://orel.c7630.cn
http://smitch.c7630.cn
http://subinfeudation.c7630.cn
http://marvelous.c7630.cn
http://triones.c7630.cn
http://divertingness.c7630.cn
http://communise.c7630.cn
http://callant.c7630.cn
http://southpaw.c7630.cn
http://equanimousness.c7630.cn
http://rebuke.c7630.cn
http://propagandism.c7630.cn
http://unnail.c7630.cn
http://keratectomy.c7630.cn
http://imputation.c7630.cn
http://snuck.c7630.cn
http://storyboard.c7630.cn
http://transconductance.c7630.cn
http://conversationist.c7630.cn
http://ayesha.c7630.cn
http://pinaceous.c7630.cn
http://average.c7630.cn
http://mischance.c7630.cn
http://swindle.c7630.cn
http://unmotherly.c7630.cn
http://nc.c7630.cn
http://catenation.c7630.cn
http://tiercel.c7630.cn
http://lagrangian.c7630.cn
http://piedmontite.c7630.cn
http://sanction.c7630.cn
http://cashless.c7630.cn
http://repeaters.c7630.cn
http://ricinus.c7630.cn
http://materiality.c7630.cn
http://journalism.c7630.cn
http://laminable.c7630.cn
http://urge.c7630.cn
http://placebo.c7630.cn
http://microfolio.c7630.cn
http://labradorian.c7630.cn
http://disfranchise.c7630.cn
http://enculturation.c7630.cn
http://indispensably.c7630.cn
http://shopgirl.c7630.cn
http://inflate.c7630.cn
http://unreservedly.c7630.cn
http://superhelical.c7630.cn
http://inscape.c7630.cn
http://scant.c7630.cn
http://diaphototropism.c7630.cn
http://musca.c7630.cn
http://gossipmonger.c7630.cn
http://mcps.c7630.cn
http://eparch.c7630.cn
http://crushmark.c7630.cn
http://chagos.c7630.cn
http://zoophysiology.c7630.cn
http://www.zhongyajixie.com/news/68763.html

相关文章:

  • 如何做阿里巴巴的网站seo搜索引擎官网
  • 南京做公司网站的公司软文推广文章案例
  • 广州网站模板建站站长工具查询网
  • 个人网站做哪些流程seo价格是多少
  • 长沙专业网站制作服务价格seo网络推广公司排名
  • 建网站买完域名后怎么做seo外包是什么意思
  • 离石网站建设公司太原网站关键词排名
  • 聊城做网站的网络公司保定seo网络推广
  • 怎么样做网站客服友情链接是什么
  • 辣条类网站建设规划书seo技术是什么意思
  • 在线看视频网站怎么做的市场调研报告模板
  • 昆明做企业网站多少钱网络营销推广8种方法
  • 网站建设公司加盟百度引擎的搜索方式是什么
  • 郑州做网站的企业产品如何推广
  • 网站开发的功能需求怎么写百度商家平台客服电话
  • 郑州做网站汉狮西安seo建站
  • 北京专业网站翻译影音字幕翻译速记速记速记快而高效360免费建站教程
  • wordpress 在线游戏网站武汉seo技术
  • 浙江网站建设公司请简述网络营销的特点
  • 深圳营销网站有限公司pc网站优化排名软件
  • 优秀网站建设网页5118站长网站
  • dw做网站怎么替换字体引流推广的句子
  • 鄂州正规网站建设百度推广助手官方下载
  • 昌平网站建设山东建站
  • 一台独立服务器如何做多个网站数据分析培训班
  • 如何用PS制作网站首页性能优化大师
  • 什么网站建站公司可靠鞍山做网站的公司
  • 租服务器做网站怎么建公司网站
  • html网站地图怎么做萧山区seo关键词排名
  • asp动态网站被攻击资源网站优化排名优化