IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 一种基于boost库对TCP协议的封装 -> 正文阅读

[网络协议]一种基于boost库对TCP协议的封装

1、一点背景知识

1.1 RFB协议

RFB ( Remote Frame Buffer 远程帧缓冲) 协议是一个用于远程访问图形用户界面的简单协议。由于 RFB 协议工作在帧缓冲层,因此它适用于所有的窗口系统和应用程序,如 Windows 3.1/95/NT 和 Macintosh 等。
RFB协议最显著的特点在于,它只负责从帧缓冲区中获取显示更新及Server端和Client端的数据交互,使客户机处理的任务尽可能减少。RFB协议对于客户端是无状态的。

1.2 VNC协议

VNC(Virtual Network Computing)是基于RFB(Remote Frame Buffer)协议进行通信,是一个基于平台无关的简单显示协议的超级瘦客户系统。VNC viewer就是实现VNC协议一个常用的软件。

1.3 H264

H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H264常用于视频编码,有关H264的介绍网络上比较好的博客有雷神的这个专栏

1.4 H264编码流对RFB封装的实现

H264能实现对RFB封装的是基于H264的分层结构和RFB的可扩展性。具体做法是在系统服务器端初始化时扩展自己的编码方式到RFB支持的编码列表中,然后将RFB协议的FrameBufferUpdate消息头和待编码矩形结构信息添加到H264编码流之前。

2、具体实现

2.1 UML图

给出一张核心类关系图
类UML图

2.2 时序图

main.cpp H264Protocol.cpp Server.cpp ServerTcpConnection.cpp TcpConnection.hpp TcpConnection.cpp SessionHandler.cpp AviChannel.cpp Connection.cpp Session.cpp Channel.cpp KeyChannel.cpp MouseChannel.cpp MotionChannel.cpp SettingChannel.cpp QemuChannel.cpp RawDataChannel.cpp init() 分配内存 new Server() Start() DoAccept() Start() AsyncRead() HandlePreface() 虚线箭头代表回调走向 HandleAuthentication() StartParser() WaitForMessage() CreateSession() new SessionHandler() Start() start() new thread() h264EncodeThreadFunc() encodeH264() SendH264() SendMessage() 经过包解析,由SessionHandler 来处理每个channel里的数据 这里的流程经过简化 ParseRecvMsg() OnMessage() GetKeyChannel() HandleBuffer() OnKeyEvent() GetKeyChannel() HandleBuffer() OnMouseEvent() GetMotionChannel() HandleBuffer() OnMotionEvent() GetSettingChannel() HandleBuffer() OnSettingEvent() GetQemuChannel() HandleBuffer() OnQemuEvent() GetRawDataChannel() HandleBuffer() OnRawDataEvent() main.cpp H264Protocol.cpp Server.cpp ServerTcpConnection.cpp TcpConnection.hpp TcpConnection.cpp SessionHandler.cpp AviChannel.cpp Connection.cpp Session.cpp Channel.cpp KeyChannel.cpp MouseChannel.cpp MotionChannel.cpp SettingChannel.cpp QemuChannel.cpp RawDataChannel.cpp

2.3 一些说明

对初级socket编程来说,我们通常创建好socket就可以开始收发数据了。在本文中,一个socket被抽象成多路connection,一路connection里面分了许多channel,如:KeyChannel、KeyChannel等等。在协议设计的时候,就需要把每一路channel占用第几字节到第几字节定义好,服务器和客户端根据这个定义来组包和解包。由于编码的底层基于boost库里的TCP实现,所以仍然是对TCP协议的封装。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:32:39  更:2022-05-24 18:33:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 14:55:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码