2013-05-12 24 views
4

我需要实现相当简单的网络协议:有微控制器(语言为C)和Java应用程序的设备,它们应该进行通信:我需要实现固件更新,也许还有其他一些事情。不同平台之间的数据传输协议

至少,我需要传输一些数据结构作为标题。

只有丑陋的方式浮现在脑海:

我可以在C面宣布堆积结构,并以某种方式处理在Java端相同的数据流。 因此,如果我的结构发生了变化,那么我需要在两边进行更改:C和Java。我非常不喜欢这个。

有没有更好的方法来做到这一点?也许,就像这样:我应该用某种特殊格式编写协议结构,然后一些实用程序可以为C和Java端生成代码。

或者,也许是不同的。

我很乐意看到建议。

回答

3

您可能想要考虑使用标准化表示法进行数据传输,如JSON。这里是关于在c中解析JSON的一些信息。

Parsing JSON using C

如果它是我的项目,我可能会去与刚装好的数据结构。希望一旦你的项目成熟,数据结构的变化很小,并且只发生在主要版本中。如果需要,您可以在数据结构中保留一个版本标记以处理遗留数据格式。

+0

感谢您的回答。我需要保持我的C bootloader尽可能轻量级,所以JSON似乎不是好方法。关于版本标签:是的,如果我决定使用这种方式,我肯定会保留它。 – 2013-05-12 18:26:18

0

你能描述一下协议的细节吗?是有状态还是无状态? 如果你的协议是无状态的,那么看看Web服务(尤其是REST-WS)。这是众所周知的跨平台交流实践。

+0

协议是无状态的,但我的电子设备无法访问万维网,它只是通过USB连接到PC。或者,我误解了你吗? – 2013-05-12 18:32:18

+0

问题标题中有“网络”字样。最常见的网络协议包含客户端和服务器角色。服务器可能暴露在本地网络中。如果您通过USB进行通信,那么Web服务就不是正确的解决方案。 – uzvar 2013-05-12 18:41:11

+0

对不起,我想我可以称之为“网络协议”。只是将其重命名为“数据传输协议”。 – 2013-05-12 19:16:25

3

解决此问题的一个常见方法是使用Google的protobuf。然而,当你指定你需要它在微控制器环境下工作时,我认为你可以将 转换为protobuf-c,这是一个纯C语言版本的protobuf。

+0

谢谢,它看起来很有趣!我一定会研究它。 – 2013-05-12 18:28:30

相关问题