C ++网络多应用协议

时间:2011-06-17 17:34:37

标签: c++ network-programming

我正在使用C ++为我的项目编写Client / Server应用程序。整个申请协议由工作组提供或讨论。主要思想是我们有3个协议。

  1. 文本协议:在客户端和服务器之间以字符串格式发送和接收一些信息。
  2. 二进制协议:客户端连续向服务器发送一些状态数据。
  3. 二进制协议:客户端连续发送一些数据,如声音/视频/图像/文本
  4. 所有协议都应在不同的端口上运行。 我实现了一个Socket-Class,负责创建和监听socket,接受来自客户端的连接。此外,还有一个接收/发送基于字符串的数据和接收/发送基于二进制数据的功能。

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

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

    谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

总的来说,我质疑文本数据的使用。与您可以命名的几乎任何序列化库相比,它效率低下。您可能会为许多硬编写的数据解析和错误检查代码交换一些额外的可调试性,以及伴随的CPU周期浪费。如果文本数据相当简单(实际上并不像XML那样结构化),那么这不是一个问题。

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

答案 1 :(得分:0)

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