C++网络多应用程序协议
C++ network multi application protocols
我正在用C++为我的项目编程一个Client/Server应用程序。工作组给出或讨论了整个应用程序协议。主要思想是我们有3个协议。
- 文本协议:在客户端和服务器之间以字符串格式发送和接收一些信息
- 二进制协议:客户端向服务器连续发送一些状态数据
- 二进制协议:客户端连续发送一些数据,如声音/视频/图像/文本
所有协议都应在不同的端口上运行。我实现了一个套接字类,它负责创建和监听套接字,接受来自客户端的连接。还有一个接收/发送基于字符串的数据和接收/发送二进制数据的功能。
在下一步中,我想定义3个类。他们每个人都应该负责在新线程中创建一个套接字,并负责为该端口定义的协议(第1-3条)。所以最后我会得到3个套接字(1个套接字用于一个端口)。
我的问题是,如果我朝着正确的方向思考?也许你可以向我推荐一些使用不同应用程序协议的设计模式。如果你能向我推荐一些项目或代码,那就太好了,这些项目或代码可以与我的项目类似。
谢谢。
您应该将套接字类与3个协议处理程序解耦-套接字上没有同时处理文本和二进制数据的方法,或者您无意中鼓励人们在同一套接字上混合和匹配数据类型,这显然不是您想要的。
您的套接字应该提供简单的连接/断开连接、数据传输和接收功能,然后在不同的对象中完成发送/接收数据的解码和编码,可能是从3个新类中选择的(每个协议一个)。
总的来说,我对文本数据的使用提出质疑。与您可以命名的任何序列化库相比,它的效率都很低。您可以用一点额外的可调试性来换取大量硬写的数据解析和错误检查代码,以及随之而来的CPU周期浪费。如果文本数据相当简单(比如说,实际上不像XML那样结构化),那么这就不那么令人担忧了。
协议2。如果状态信息不是关键任务,则可以使用UDP而不是TCP来实现。这就少了一个你必须管理的连接。
您可以考虑使用enet。它可以进行可靠和不可靠的UDP通信,并将为您完成大部分繁重的通信任务。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 协议缓冲区2和3在同一C Linux应用程序中
- 是否有用于配置应用程序的标准会话层协议
- 如何在Qt中编写客户端-服务器应用程序并实现简单的协议
- 实现应用程序网络协议的安全问题
- 用于通过网络在应用程序之间进行通信的协议/基础结构
- C++网络多应用程序协议
- c++应用程序根时使用自定义协议