2011-09-20 104 views
0

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

+0

这是功课吗?你可以使用已经实现的(和很好的)协议,因为你不会重新发明轮子。 – Blender

+0

你是从零开始构建这个项目作为一个excercise/class项目吗?如果没有,那么你应该使用像TCP/IP这样的现成协议。 –

+0

客户端有大量的消息要发送到服务器。单个消息可以大于1024字节,这将在服务器上接收。因此,如果客户端的m/c速度很快,以前的消息大小大于1024字节,则下一条消息与前一条消息混合在一起。所以我所做的是在每条消息给客户端延迟之后,服务器有时间接收当前消息的所有字节。这不是正确的方法,所以我想设计一些标准的方法来做到这一点。我想要一个基于帧的协议,其中每个帧的长度小于等于1024。 –

回答

0

协议是相互理解交换的东西。协议的细节定义了应用程序的可靠性和关键任务。

实现简单协议的方式只是将帧大小嵌入到数据包的开头。此外,可以将数据作为大量文件进行异步接收。将它们分开并添加到处理队列中很简单。如果您拥有固定的尺寸,而不是分享尺寸,只需阅读每个1024帧并将其视为您的帧。一个简单的计数器将有助于这个权利?

0

除了基本信息之外,还需要引入某种序列编号方案,表示连续编号(第一个包的编号为0),以便服务器可以理解新的数据包流和以前的数据之间的差异流,并且如果出现无序传送,也将它们重新排序。

如果您正在设计一个真实世界的应用程序,现在您不必这么做,因为您只需选择TCP/IP进行可靠的事务处理,并且如果您检查它的详细信息,它将处理所有您正在说话的情况关于。但是,如果你必须设计一个更小的协议,我建议创建一个协议的小状态图来检查所有路径是否导致某些最终状态(协议状态机),否则很容易错过某些情况。