4

我需要实现相当简单的网络协议:有带有微控制器(语言是 C)和 Java 应用程序的设备,它们应该通信:我需要实现固件更新,也许还有其他一些事情。

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

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

我可以在 C 端声明打包结构,并在 Java 端以某种方式处理相同的数据流。所以,如果我的结构发生了变化,那么我需要在两个方面都进行更改:C 和 Java。我非常不喜欢这个。

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

或者,也许,一些不同的东西。

我很高兴看到建议。

4

3 回答 3

3

解决此问题的一种常见方法是使用 Google 的protobuf。但是,正如您指定的那样,您需要它在微控制器环境中工作,我认为您可以查看protobuf-c,它是 protobuf 的纯 C 版本。

于 2013-05-12T17:54:39.607 回答
3

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

使用 C 解析 JSON

如果这是我的项目,我可能会使用打包的数据结构。希望一旦您的项目成熟,对数据结构的更改是最小的,并且仅在主要版本期间发生。如果需要,您可以在数据结构中保留版本标记以处理旧数据格式。

于 2013-05-12T17:16:07.690 回答
0

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

于 2013-05-12T17:16:59.803 回答