文章目录

  • 前言
  • 一、通讯组件
  • 二、客户端 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 网络消息处理_通讯与协议(客户端通信)相关推荐

  1. Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)

    Qt实现Winsock网络编程-TCP服务端和客户端通信(多线程) 前言 感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多.博主用Qt ...

  2. Linux_网络_传输层协议 TCP通信滑动窗口(快重传),流量控制,拥塞控制(慢启动),延迟应答,捎带应答,TCP常见问题(字节流,粘包),Listen半连接队列

    紧跟Linux_网络_传输层协议 TCP/UDP继续补充 文章目录 1. TCP通信时滑动窗口(效率) 2. 流量控制(可靠性) 3. 拥塞控制(慢启动) 4. 延迟应答 5. 捎带应答(提高通信效率 ...

  3. C# Socket网络编程入门(服务器与客户端通信,客户端与客户端通信)

    WebSocket全双工通讯链接,用于前台和后台自由发送信息 一.效果展示: 效果描述: 1.服务器充当管理员,给所有人发送信息,除服务器以外其他人都能接受到. 2.其他用户发送信息除自己以外其他用户 ...

  4. 基于modbus协议的工业自动化网络规范_工控学堂:解读Modbus通讯协议「宜收藏」...

    作为工控人,Modbus通讯协议想必都不陌生,Modbus通讯协议可以说是工业自动化领域应用最为广泛的通讯协议,因为他的开放性.可扩充性和标准化使他成为通用工业标准. 1979年施耐德电气制定了一个用 ...

  5. 判断设备网络状态_生成树RSTP,快速生成树协议,交换网络必用的破环协议,面试必备...

    一.RSTP 802.1w 标准定义了快速生成树协议 RSTP(Rapid Spanning Tree Protocol),该协议基于 STP 协议,对原有的 STP 协议进行了改进并实现了快速收敛. ...

  6. Linux网络服务_邮件服务器-Redhat Enterprise 5.9

    Linux网络服务_邮件服务器-Redhat Enterprise 5.9 案例环境: 邮件服务器:mail.tarena.com192.168.1.100 邮件域:@tarena.com 邮件账号: ...

  7. python 爬虫源代码-从零开始学Python网络爬虫_源代码.rar

    [实例简介] [实例截图] [核心代码] 从零开始学Python网络爬虫_源代码_1 ├── 58project │ ├── __pycache__ │ │ ├── channel_extract.c ...

  8. 服务器具有挂起的重新启动_ESP8266与网络服务器实时通讯

    背景知识视频教程 Bootstrap 4布局:响应式单页设计​viadean.com Node.js,Express,MongoDB等:2020年完整的训练营 - 国外课栈​viadean.com 高 ...

  9. 智慧北京02_初步ui框架_ 主界面_viewPager事件_xUtils_slidingMenu_网络缓存_数据传递...

    智慧北京02_初步ui框架_ 主界面_viewPager事件_xUtils_slidingMenu_网络缓存_数据传递 1.使用Fragment搭建ui框架 参考分析图 1.1,Fragment生命周 ...

最新文章

  1. Struts2--标签tag
  2. php ci框架分页类,nusoap 与 CI框架不用WSDL
  3. 15 分钟带你入门 sklearn 与机器学习(分类算法篇)
  4. 计算机原理解读图,详细讲解仪器仪表测试系统,结构原理图拿走不谢
  5. javascript mobile web
  6. python下载文件加上日期_python拷贝文件夹中特定日期内的文件
  7. 景区门票系统上云 低成本、安全性高
  8. thinkphp下载远程图片到本地
  9. 怎么用eclipse编写python_python用eclipse开发配置
  10. 【数字信号调制】基于matlab GUI AM+DSB+SSB+ASK+FSK+PSK调制解调【含Matlab源码 058期】
  11. 市场上常见电阻阻值表
  12. 手机录音ogg格式怎么转换mp3
  13. 解决thinkbook14p 的windows11系统关机或者睡眠时间长扩展坞无法加载网口和hdmi接口
  14. 计算机桌面壁纸小,电脑的桌面壁纸大小怎么设置
  15. 联发科p60和骁龙710哪个好_骁龙670、联发科P60和麒麟710哪个好 详细对比介绍
  16. cshop模板smarty foreach详解
  17. mysql-8.0.21-winx64数据库安装过程记录
  18. Keep It for Mac 1.3.4 强大的笔记本工具 破解版下载
  19. SOME/IP有那么难吗?
  20. 美国金融博士和经济学博士的区别

热门文章

  1. Spring声明式事务配置管理方法
  2. 页面滚动的时候自动切换导航栏
  3. 练手小项目——canvas放大镜效果 放大图片
  4. 人工神经网络图像识别,神经网络如何识别图像
  5. 综测仪 之 IQxel使用方法介绍
  6. sqlserver2000安装程序以及补丁下载
  7. 在ThinkPHP中开启调试模式
  8. jarvisoj level3
  9. 【主动投资组合管理】第1章 绪论
  10. R统计笔记(二):投影运算与转换