不同平台之间的数据传输协议

4
我需要实现一个相当简单的网络协议:有一个带有微控制器(使用C语言)和Java应用程序的设备,它们应该进行通信:我需要实现固件更新,以及可能还有其他一些事情。
至少,我需要传输一些数据结构作为头文件。
只有丑陋的方式浮现在脑海中:
我可以在C端声明打包结构,并在Java端以某种方式处理相同的数据流。 因此,如果我的结构发生改变,则需要在C和Java两侧进行更改。我强烈不喜欢这个方法。
是否有更好的方法?也许像这样:我应该以某种特殊格式编写协议结构,然后某些工具可以为C和Java双方生成代码。
或者,也许是其他什么东西。
期待您的建议。
3个回答

3
你可能想考虑使用诸如JSON之类的标准化数据传输符号。以下是有关在C中解析JSON的一些信息。 使用C解析JSON 如果是我的项目,我可能只会使用紧密打包的数据结构。希望一旦您的项目成熟,对数据结构的更改将最小化,并且仅在主要版本发布期间发生。您可以在数据结构中保留版本标记以处理旧版数据格式(如果需要)。

谢谢您的回答。我需要尽可能保持我的 C 引导程序轻便,所以 JSON 似乎不是一个好选择。关于版本标签:是的,如果我决定使用这种方式,我肯定会加入它。 - Dmitry Frank

3

解决这个问题的常见方法是使用Google的protobuf。但是,由于您指定需要在微控制器环境中使用它,因此我认为您可以看一下protobuf-c,这是protobuf的纯C版本。


谢谢,看起来很有趣!我一定会去了解一下。 - Dmitry Frank

0

你能描述一下协议的细节吗?它是有状态的还是无状态的? 如果你的协议是无状态的,那么可以看看 Web 服务(特别是 REST-WS)。这是一个众所周知的跨平台通信实践。


协议是无状态的,但我的电子设备无法访问互联网,它只能通过USB连接到计算机。或者,我误解了你的意思? - Dmitry Frank
问题标题中有“网络”一词。最常见的网络协议包含客户端和服务器角色。服务器可以仅在本地网络中公开。如果您通过USB进行通信,则Web服务不是正确的解决方案。 - uzvar
抱歉,我以为可以称之为“网络协议”。现在已将其更名为“数据传输协议”。 - Dmitry Frank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接