|如何创建自己的Tracker( 四 )
本文插图
正如您在else语句中看到的那样(在关闭调试模式的情况下编译会进入此语句) , 该函数会检查客户端证书和服务器证书是否匹配 。 但是 , 看看在调试模式下发生了什么——它只会返回true , 并且发生在客户端……我们的客户端可以执行同样的操作以启动与服务器的有效SSL通信 。 让我们记住这一点并继续 。 接下来发生的事情有些棘手 , 在Client类的第290行中 , 将调用OnClientState , 但是因为从Client类中调用了OnClientState , 所以事件注册功能会生效 , 而事件处理功能将不会生效:
本文插图
我们必须手动找到QuasarClient类 , 然后从那里进入到OnClientState 函数(我建议读者多读几次源码并充分理解其含义 , 这对于理解其工作原理有相当大的帮助) 。 但我们应该如何找到它?答案很简单 , 让我们回到Class0 , 即Program.cs
本文插图
本文插图
因此 , Gclass27是QuasarClient , 为其重命名以便之后找到它更方便 , 接下来我们将通过双击该类并尝试手动查找OnClientState来访问该类:
本文插图
让我们在第79行设置一个断点 , 并在之前的PayloadWriter WriteBytes函数内设置一个断点 , 该函数位于Stream1的method02 。 在第79 行 , 创建Class18 , 然后将其传递给send函数中 。 Class18在Quasar源码中为ClientIdentification:
本文插图
这是消息构造函数 , 如果我们继续执行到 payload writer , 可以看到该消息的内容:
本文插图
本文插图
我们仅是截取了整个消息 。 但是我注意到一些奇怪的事情——ClientIdentification类中只有14个成员 , 为什么这里却有28个成员?
本文插图
另外 , 在第38行中 , 会将消息复制到数据流中并进行序列化 , 然后发送消息的长度 , 以及由序列化函数返回的原始字节 。 我尝试查看序列化后消息的内容 。 首先 , 让我们调试该程序到第40行 , 右键单击该变量 , 然后选择show memory window , 以查看该数组变量的内容:
除了一些文本内容 , 其它的部分没有任何意义 。
0x03 消息序列化与Google Protocol Buffer
为了节省读者时间 , 我简单解释下什么是序列化 。 序列化是一种压缩消息大小并提高处理效率的方法 。 序列化有诸多类型——其中一种是将消息压缩为json格式或XML格式 , 然后将其发送 , 接收方会按照预先约定好的协议对消息进行反序列化 。 可以在此处了解有关序列化的信息 。
Quasar使用了由Google开发的Protobuf , Protobuf是一消息序列化程序 。 (希望您在看完上述视频后明白其原理)
这就是我们之前看到的这些ProtoMember:
本文插图
推荐阅读
- 模型|REVIT技巧!如何创建能量模型,实现能量优化
- 技术编程|如何利用数据库进行世界史研究
- 区块链|欧科云链任煜男做客西安广电电台节目,解读区块链如何赋能实体产业
- 苹果笔记本|如何让macbook合上时工作?解决苹果电脑合盖自动休眠问题-macw
- |如何分析“会员数据”,强化门店的竞争力?
- 拍照摄影|如何拍出赞爆朋友圈的自拍照?网红小姐姐公开拍照神器
- 目标检测|数据民工也能移动办公了:目标检测标注App上线,分分钟创建私人数据集
- IOS系统|苹果免签封装如何实现?苹果免签封装会不会掉签?
- 帧数|帧数提升70% NV黑科技DLSS如何开启
- 拍照摄影|即将进入大学的新生想入手一台相机,该如何选?
