【极】P3-1 网络消息处理_通讯与协议(客户端通信)
文章目录
- 前言
- 一、通讯组件
- 二、客户端 NetClient脚本
- 1.Connect 连接方法
- 2.DoConnect 开始链接
- 3.链接完成后发送信息 SendMessage()
- 4.Update()执行结束->客户端链接流程结束
- 总结
前言
这次了解的是项目通讯组件,大概过了一遍各个通讯组件的作用以及怎么互相通信调用的
提示:以下是本篇文章正文内容,下面案例可供参考
一、通讯组件
从上至下是
网络客户端&服务端监听
:一个在客户端发送信息,一个在服务器监听信息响应信息
封包处理器
:处理封包和协议的转换,网络上接收的数据序列化为Protro协议所接受的数据,也可反序列化把Protro协议的数据转为网络通信的数据格式
消息分发器&消息分配处理器
:服务端接收到客户端的信息 分发到服务器的各个通信模块,为了速度使用了多线程处理和分发器一起工作。
分发器只管分发不管给谁,分配器就是用来做一对一分配,维护哪个消息交给哪个模块处理
二、客户端 NetClient脚本
要想客户端与服务端通信,第一件事情就是要链接到服务端
客户端只提供发链接消息的功能
1.Connect 连接方法
int time 为重连时间,服务于断线重连
if(this.connecting) 判断有没有链接,如果有就结束
this.DoConnect() 开始链接
2.DoConnect 开始链接
使用try cath //防止链接中出错,抓取错误
new Soket 设置Soket //网络链接采用的是TCP协议
this.clientSocket.Blocking = true //设置阻塞的状态 客户端链接服务器时我们希望链接是阻塞的,因此我们能实时等待到链接的成果
this.clientSocket.BeginConnect() //链接 得到一个Result(请求)
result.AsyncWaitHandle.WailtOne() //这里使用了异步的方式,异步的时候并不会等待,因此我们需要使用AsyncWaitHandle来使它等待,WaitOne 会等待我们异步的事件,直到它完成才继续往下执行,反之如果不阻塞,将会直接往下执行,但会违背我们阻塞的初衷
---
catch(SocketException ex) //捕获 链接被拒绝或者链接异常这些属于网络专有的错误catch(Exception e) //捕获常规异常if(this.clientSocket.Connected) //前面执行完后,这里再会判断一次,继续判断本次的链接是否成功this.clientSocket.Blocking=false; //链接成功之后就把阻塞清除,也为了后面玩起来和服务器进行通讯的时候是畅通无阻的this.connecting = false //链接已完成,标记为false,表示现已不在链接,链接过程已完成
3.链接完成后发送信息 SendMessage()
NetMessage
协议自动生成的类
if(!this.Conected) 判断是否链接状态
this.Connect(); 没有就再链接一次
sendQueue.Equeue(message) 发送队列,为了不影响玩家操作(例如不小心在一帧发了一百个消息,但因为队列,不会在一瞬间发出)
4.Update()执行结束->客户端链接流程结束
if(this.KeepConnect()) 保证断线重连,判断状态if(this.ProcessRecv()) 先接收(什么处理都不做),每一帧先看没有请求数据,有就收到之心执行链接if(this.Connected) 收到后判断有没有异常(有没有和服务器连着)this.ProcessSend(); 发送消息this.ProcessMessage(); 处理消息。
消息分发器,直接分发信息
这里能直接分发的原因,是接收信息的时候,对数据进行了处理(ret=this.clientSocket.Poll(0,SelectMode.SelectRead))
;
int n = clientSocket.Receive
(把数据写入到缓存区)
this.packageHandle.ReceiveDate()
调用服务器的封包处理器接收数据的方法
总结
大概的了解了客户端的链接流程,底层没有过度的深入,目前只知道这些代码有什么用就行。
【极】P3-1 网络消息处理_通讯与协议(客户端通信)相关推荐
- Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)
Qt实现Winsock网络编程-TCP服务端和客户端通信(多线程) 前言 感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多.博主用Qt ...
- Linux_网络_传输层协议 TCP通信滑动窗口(快重传),流量控制,拥塞控制(慢启动),延迟应答,捎带应答,TCP常见问题(字节流,粘包),Listen半连接队列
紧跟Linux_网络_传输层协议 TCP/UDP继续补充 文章目录 1. TCP通信时滑动窗口(效率) 2. 流量控制(可靠性) 3. 拥塞控制(慢启动) 4. 延迟应答 5. 捎带应答(提高通信效率 ...
- C# Socket网络编程入门(服务器与客户端通信,客户端与客户端通信)
WebSocket全双工通讯链接,用于前台和后台自由发送信息 一.效果展示: 效果描述: 1.服务器充当管理员,给所有人发送信息,除服务器以外其他人都能接受到. 2.其他用户发送信息除自己以外其他用户 ...
- 基于modbus协议的工业自动化网络规范_工控学堂:解读Modbus通讯协议「宜收藏」...
作为工控人,Modbus通讯协议想必都不陌生,Modbus通讯协议可以说是工业自动化领域应用最为广泛的通讯协议,因为他的开放性.可扩充性和标准化使他成为通用工业标准. 1979年施耐德电气制定了一个用 ...
- 判断设备网络状态_生成树RSTP,快速生成树协议,交换网络必用的破环协议,面试必备...
一.RSTP 802.1w 标准定义了快速生成树协议 RSTP(Rapid Spanning Tree Protocol),该协议基于 STP 协议,对原有的 STP 协议进行了改进并实现了快速收敛. ...
- Linux网络服务_邮件服务器-Redhat Enterprise 5.9
Linux网络服务_邮件服务器-Redhat Enterprise 5.9 案例环境: 邮件服务器:mail.tarena.com192.168.1.100 邮件域:@tarena.com 邮件账号: ...
- python 爬虫源代码-从零开始学Python网络爬虫_源代码.rar
[实例简介] [实例截图] [核心代码] 从零开始学Python网络爬虫_源代码_1 ├── 58project │ ├── __pycache__ │ │ ├── channel_extract.c ...
- 服务器具有挂起的重新启动_ESP8266与网络服务器实时通讯
背景知识视频教程 Bootstrap 4布局:响应式单页设计viadean.com Node.js,Express,MongoDB等:2020年完整的训练营 - 国外课栈viadean.com 高 ...
- 智慧北京02_初步ui框架_ 主界面_viewPager事件_xUtils_slidingMenu_网络缓存_数据传递...
智慧北京02_初步ui框架_ 主界面_viewPager事件_xUtils_slidingMenu_网络缓存_数据传递 1.使用Fragment搭建ui框架 参考分析图 1.1,Fragment生命周 ...
最新文章
- Struts2--标签tag
- php ci框架分页类,nusoap 与 CI框架不用WSDL
- 15 分钟带你入门 sklearn 与机器学习(分类算法篇)
- 计算机原理解读图,详细讲解仪器仪表测试系统,结构原理图拿走不谢
- javascript mobile web
- python下载文件加上日期_python拷贝文件夹中特定日期内的文件
- 景区门票系统上云 低成本、安全性高
- thinkphp下载远程图片到本地
- 怎么用eclipse编写python_python用eclipse开发配置
- 【数字信号调制】基于matlab GUI AM+DSB+SSB+ASK+FSK+PSK调制解调【含Matlab源码 058期】
- 市场上常见电阻阻值表
- 手机录音ogg格式怎么转换mp3
- 解决thinkbook14p 的windows11系统关机或者睡眠时间长扩展坞无法加载网口和hdmi接口
- 计算机桌面壁纸小,电脑的桌面壁纸大小怎么设置
- 联发科p60和骁龙710哪个好_骁龙670、联发科P60和麒麟710哪个好 详细对比介绍
- cshop模板smarty foreach详解
- mysql-8.0.21-winx64数据库安装过程记录
- Keep It for Mac 1.3.4 强大的笔记本工具 破解版下载
- SOME/IP有那么难吗?
- 美国金融博士和经济学博士的区别