文章目录

  • 前言
  • PESocket
  • 服务器使用PESocket
    • 创建
    • 引用
  • 客户端(Unity)使用PESocket
  • 代码
    • 服务器
      • NetMsg
      • ServerStart
      • ServerSession
    • 客户端
      • GameStart
      • ClientSession

前言

学习自SIKI学院教程(《暗黑战神》3D网游ARPG实战案例)

PESocket

PESocket
基于C#语言实现的高效便捷网络库。支持集成到Unity当中使用。
不用过多了解网络通信内部原理,只需几行简单的代码,便能简捷快速开发基于C#语言的服务器和客户端,实现网络通信。

  • 下载PESocket
    GitHub地址:https://github.com/PlaneZhong/PESocket
  • 介绍网络库(防止学校访问外网波动)
    博客园地址:https://www.cnblogs.com/planezhong/p/10074676.html

打开PESocket解决方案

在NetMsg里修改IP地址为本地(一般如下)

两种方法使用PESocket插件(这里使用第一种):
1.使用他编译出来的dll直接在代码里引用(修改可以直接重新生成)
2. 直接复制源文件

右键属性-生成-更改路径-重新生成解决方案

服务器使用PESocket

创建

  1. 新建一个项目,删除默认创建的项目及文件(资源管理器中的也要删掉)
  2. 新建一个服务器工程(框架保持默认)
  3. 服务器需要与客户端进行通信,需要一个协议(类库)
  4. 右键属性修改协议框架如下

    分别将项目里的名字改成"NetMsg"与"ServerStart",(ServerSession后面加的,这里命名随意)

引用

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

有了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");}}

客户端(Unity)使用PESocket

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

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

代码

服务器

NetMsg

using PENet;
using System;/// <summary>
/// 服务器需要与客户端进行通信,需要一个协议
/// </summary>
namespace Protocal
{[Serializable]//这条消息需要在网络中进行传输,需要转化为二进制public class NetMsg:PEMsg{public string text;}//确定当前服务器的ip和端口public class IPCfg{public const string srvIP = "127.0.0.1";public const int srvPort = 17666;}
}

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){}}}
}

ServerSession

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");}}

客户端

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"});}}
}

ClientSession

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");}
}

在游戏中的使用方法后续补充,有不对的地方望指出!

C#开源网络通信库PESocket的使用相关推荐

  1. 爱上开源之网络通信库boot4go-fastnet,简单而不乏高能

    准备在物联网中间件这块做一些创新的产品, 故先提前准备了剥离出以后自己御用的底层tcp通讯的网络库boot4go-fastnet. boot4go-fastnet项目简单,主要代码大小不足20K,但是 ...

  2. Linux下常用的C/C++开源Socket库

    1.      Linux Socket Programming In C++ : http://tldp.org/LDP/LG/issue74/tougher.html 2.      ACE: h ...

  3. ESP32开源驱动库Easyio的使用,基于ESP-IDF开发框架,非Arduino

      Easyio 是一款适配于ESP-IDF框架的开源驱动库,以支持ESP32的简便开发.目的是简化乐鑫ESP-IDF开发框架的使用难度.(真要方便的话,有现成的Arduino和Platform可以用 ...

  4. 搜索算法,一触即达:GitHub上有个规模最大的开源算法库

    视学算法报道 编辑:杜伟 赶紧去试试吧! 我们知道,算法本质上是一套规则,它接受一个或多个输入,然后执行内部计算和数据操作,返回一个或多个输出.从复杂的数据操作和哈希,到简单运算,算法通过一系列步骤来 ...

  5. python库开源网站_开源Python库

    开源Python库 Python 一个很受人欢迎的原因之一是其有很丰富的第三方库,到本文开始写的时候已经在 PyPI 上有108298个第三方包提供.有人还对第三方库做了很好的总结 Awesome P ...

  6. 脚本没有类似C语言的预编译,开源脚本库

    开源脚本库 1 TinyC(TCC) 1.1 优点 1.1.1 速度快:直接x86汇编代码 1.1.2 标准C支持:支持标准的 ANSI C 语言,而且也支持 ISO C99 标准 1.2 缺点 1. ...

  7. 【深度学习】基于Torch的Python开源机器学习库PyTorch卷积神经网络

    [深度学习]基于Torch的Python开源机器学习库PyTorch卷积神经网络 文章目录 1 CNN概述 2 PyTorch实现步骤2.1 加载数据2.2 CNN模型2.3 训练2.4 可视化训练 ...

  8. 【深度学习】基于Torch的Python开源机器学习库PyTorch回归

    [深度学习]基于Torch的Python开源机器学习库PyTorch回归 文章目录1 torch.autograd 2 torch.nn.functional 3 详细的回归DEMO3.1 DATAS ...

  9. 【深度学习】基于Torch的Python开源机器学习库PyTorch概述

    [深度学习]基于Torch的Python开源机器学习库PyTorch概述 文章目录 1 PyTorch简介 2 环境搭建 3 Hello world!3.1 Tensors (张量)3.2 操作 4 ...

最新文章

  1. DPI — nDPI — Overview
  2. HDU 5025:Saving Tang Monk(BFS + 状压)
  3. 因果关系和相关关系 大数据_数据科学中的相关性与因果关系
  4. sklearn——AdaBoost应用
  5. matlab求解lmi,Matlab的LMI工具箱中最优化问题
  6. 使用mysql命令还原student表_自用mysql自带命令实现数据库备份还原的方法
  7. centos7卸载docker_新手快速入门Docker,轻松掌握Docker安装与使用
  8. ERROR:STATUS_BROM_CMD_SEND_DA_FALL(0xC0060003)
  9. 计算机无法备份,iTunes无法备份是怎么回事?iTunes无法备份怎么解决?
  10. 爬虫返回乱码以及解决办法以及锟斤拷、ISO-8859-1转码、#、#x转码、unicode转码,gbk转码,ascii转码
  11. 清理或破坏病毒流氓若干
  12. 彻悟人生555句金玉良言
  13. JAVA毕业设计vue健康餐饮管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
  14. Python数据分析与可视化(基础知识)Python基础
  15. 深入理解Seq2seq模型(Sequence2sequence)
  16. NLP-中文、英文分词
  17. 计算机毕业设计Java物流车辆规费管理系统的设计与实现(源码+系统+mysql数据库+Lw文档)
  18. 2020茶艺师(中级)模拟考试及茶艺师(中级)模拟考试题库
  19. AutoSAR的入门知识
  20. java判断任意两数的最小公倍数和最大公约数

热门文章

  1. 常见的7种软件规模估算方法 优劣势比较
  2. 搜狗手机浏览器测试管理方法(一)
  3. python控制机械臂6轴_基于Firmata协议的ROS Moveit六轴机械臂设计
  4. 在html中文本框不可编辑状态,input框不可编辑_怎么让Html文本框不可编辑
  5. Linux-定时任务(备份)-进程管理-后台screen管理-ssh
  6. 关键字工具有哪些功能!?
  7. 游戏王决斗连接显示服务器错误,游戏王决斗链接进不去 国服常见问题解决方案...
  8. 19章 位运算与进制转换
  9. excel中的常用技巧_在Excel中控制技巧
  10. Markdown转Html应用与实践