C++网络多应用程序协议

C++ network multi application protocols

本文关键字:协议 应用程序 网络 C++      更新时间:2023-10-16

我正在用C++为我的项目编程一个Client/Server应用程序。工作组给出或讨论了整个应用程序协议。主要思想是我们有3个协议。

  1. 文本协议:在客户端和服务器之间以字符串格式发送和接收一些信息
  2. 二进制协议:客户端向服务器连续发送一些状态数据
  3. 二进制协议:客户端连续发送一些数据,如声音/视频/图像/文本

所有协议都应在不同的端口上运行。我实现了一个套接字类,它负责创建和监听套接字,接受来自客户端的连接。还有一个接收/发送基于字符串的数据和接收/发送二进制数据的功能。

在下一步中,我想定义3个类。他们每个人都应该负责在新线程中创建一个套接字,并负责为该端口定义的协议(第1-3条)。所以最后我会得到3个套接字(1个套接字用于一个端口)。

我的问题是,如果我朝着正确的方向思考?也许你可以向我推荐一些使用不同应用程序协议的设计模式。如果你能向我推荐一些项目或代码,那就太好了,这些项目或代码可以与我的项目类似。

谢谢。

您应该将套接字类与3个协议处理程序解耦-套接字上没有同时处理文本和二进制数据的方法,或者您无意中鼓励人们在同一套接字上混合和匹配数据类型,这显然不是您想要的。

您的套接字应该提供简单的连接/断开连接、数据传输和接收功能,然后在不同的对象中完成发送/接收数据的解码和编码,可能是从3个新类中选择的(每个协议一个)。

总的来说,我对文本数据的使用提出质疑。与您可以命名的任何序列化库相比,它的效率都很低。您可以用一点额外的可调试性来换取大量硬写的数据解析和错误检查代码,以及随之而来的CPU周期浪费。如果文本数据相当简单(比如说,实际上不像XML那样结构化),那么这就不那么令人担忧了。

协议2。如果状态信息不是关键任务,则可以使用UDP而不是TCP来实现。这就少了一个你必须管理的连接。

您可以考虑使用enet。它可以进行可靠和不可靠的UDP通信,并将为您完成大部分繁重的通信任务。