【问题标题】:Protocol design for an application应用程序的协议设计
【发布时间】:2011-09-20 04:32:46
【问题描述】:

我正在编写一个客户端服务器应用程序。在这种情况下,我必须将大小为 1024 字节的数据包从客户端传输到服务器。如果数据包大小更大,则必须将其分成两个数据包。服务器必须了解接收到的数据包是新数据包还是旧数据包的延续。然后它应该包含协议的版本号。该协议可以被多个应用程序使用,因此数据包还应包含应用程序标识符以确定哪个应用程序。数据包还应包含 crc 信息以检查数据包中的错误。任何人都可以建议我设计上述协议以在客户端和服务器之间进行通信。 任何人都可以向我推荐一些教程,这些教程将解释如何从客户端加密和发送数据,然后在服务器中接收和解码。

【问题讨论】:

  • 这是作业吗?您可以使用已经实现(且制作精良)的协议,因为您不会重新发明轮子。
  • 你是从头开始构建这个作为一个练习/课堂项目吗?如果没有,那么您应该使用现成的协议,例如 TCP/IP。
  • 客户端有大量消息要发送到服务器。一条消息可以大于 1024 字节,这将在服务器上接收。因此,如果客户端 m/c 速度很快,前一条消息的大小大于 1024 字节,则下一条消息将与前一条消息混合。所以我所做的是在每条消息之后我给客户端一个延迟,以便服务器有时间接收当前消息的所有字节。这不是正确的方法,所以我想设计一些标准的方法来做到这一点。我想要一个基于帧的协议,其中每个帧的长度小于等于 1024。

标签: client-server protocols


【解决方案1】:

协议是在相互理解的基础上交换的东西。协议的详细信息定义了您的应用程序的可靠性和任务关键性。

实现一个简单协议的方式是简单地将帧大小嵌入数据包的开头。此外,数据可以作为文件块异步接收。将它们分开并添加到处理队列中是很简单的逻辑。如果您有固定大小,而不是共享大小,只需读取每个 1024 帧并将其视为您的帧。一个简单的计数器会对此有所帮助吗?

【讨论】:

    【解决方案2】:

    除了基本信息之外,您还需要引入某种序列编号方案来指示连续编号(第一个数据包为 0),以便服务器可以了解新数据包流与前一个数据流中的数据之间的区别如果交货无序,还可以重新订购。

    现在,如果您正在设计一个真实世界的应用程序,您就不必做所有这些,因为您只需选择 TCP/IP 进行可靠的交易,并且如果您检查它的详细信息,它可以处理您所谈论的所有情况.但是,如果您确实必须设计一个较小的协议,我建议您创建一个协议的小型状态图,以检查所有路径是否通向某些最终状态(协议状态机),否则很容易错过某些情况

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2010-10-05
      相关资源
      最近更新 更多