首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++网络多应用协议

C++网络多应用协议
EN

Stack Overflow用户
提问于 2011-06-17 17:34:37
回答 2查看 796关注 0票数 4

我正在用C++为我的项目编写客户机/服务器应用程序。工作组给出或讨论了整个应用程序协议。主要思想是我们有三个协议。

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

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

在接下来的步骤中,我想定义3个类。它们中的每一个都应该负责在新线程中创建一个套接字,并负责为该端口定义的协议(第1-3条)。因此,在最后我将得到3个套接字(一个端口的一个套接字)。

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-17 17:44:02

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

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-06-17 19:37:56

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6389544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档