2010-11-26 146 views
1

我有一个客户端服务器程序使用USB Android手机进行通信的PC,基于http://www.anothem.net/archives/2010/10/15/android-usb-connection-to-pc/协议设计

现在我需要设计有助于从PC到手机的信息交换的协议。我应该怎么做呢?我们应该使用XML吗?我正在寻找谷歌协议缓冲区..这是正确的方向?

感谢 卡罗琳

+1

你想运输的数据有多复杂?你希望别人也使用你的协议吗? – Knubo 2010-11-26 06:58:16

+0

这些数据可能是点击,触摸等命令......我想的更多的是针对这个应用程序的协议..所以我不确定它是否对其他人有用。 – Carl 2010-11-26 07:45:20

回答

3

您需要先设计你的协议的更高层。 Xml和协议缓冲区与数据的格式有关。根据您需要交换的数据,它们可能不适合。从你评论的方式来看,你似乎想为PC开发一些类似遥控器的东西。在这种情况下,XML和Google协议缓冲区都将是过度设计。只需创建一个文本协议,为命令类型分配一个或两个字节,为数据主体分配一些字节。

看一看的AT commands结构。 HDLC框架的结构也可以给你一些想法。这有一些东西,如错误检查,你不需要,但除了一个简单的文本协议将使用类似的领域。

4

我一直在Android上使用协议缓冲区。我避免了很长时间,推理它是过度的。那是我花了半天的时间才尝试出来的。

这是我花了一个下午后的结果。起初,它将我的APK大小从2.89megs增加到3.1 megs。我认为这是无关紧要的。然后,我发现我能够删除我在各地的代码,我一直在手动进行解析。我能够删除需要数据以特定顺序进入的代码。

然后我就能够完全删除几节课我在我的应用程序,其目的是作为临时的,轻量级的信息只有“模式”即表示的数据来或从数据流类。总之,它开始让事情变得更容易,更小,更可靠。

Protocol Buffers的可能是不适合自己情况的最好的事情。但我建议你花几个小时试试看。这样你就会做出决定,将自己置身于一个有力量和知识的位置。

请务必使用lite版本的协议缓冲区。 .jar文件是160k,但它带来的功能量非常大。我会一直使用它从这里出来。

我做的游戏情境长期使用时,它具有动态内存分配/垃圾收集一些顾虑。但是现在序列化发生的频率不够,对我来说这不是问题。

另一个好处:我有一个生成数据文件,该应用程序读取一些Python代码。该python代码处理一些XML,然后生成二进制文件。我想我可以通过使用协议缓冲区的文本模式完全消除该代码,然后直接使用protoc创建二进制文件。