0

我想通过 TCP Socket 将一些复杂的对象从 Java 客户端发送到 C 服务器。

我怎样才能做到这一点 ?

4

3 回答 3

4

从根本上讲,问题是“如何以与语言无关的方式序列化/反序列化对象? ”在您的情况下特别是 Java 和 C。由于您将通过网络发送此数据,因此处理网络顺序/字节顺序问题也很重要。

我假设您可以访问客户端和服务器。这意味着您可以选择如何序列化数据。(如果不是,答案很简单。写下对方期望的规格)

就个人而言,我会使用Protocol Buffers。有Java 绑定C 绑定

如果您不喜欢 Protocol Buffers,还有其他选项,例如:

于 2012-04-18T23:28:28.540 回答
3

将 Java 对象的字段写入字符串(可能是JSON),通过 TCP 发送它们,然后让 C 程序读取字符串并使用它在另一端初始化新的 C 变量。

于 2012-04-18T22:38:29.393 回答
1

这个问题已经很老了,但万一有人还在寻找一个好的解决方案,你可以尝试协议缓冲区的实现,正如@Adam Liss 之前的回答中提到的那样:(developers.google.com/protocol-buffers /)

简而言之,您可以像在协议实现中那样定义任何复杂的消息类型,并且该工具会生成可以序列化和反序列化它的 C++/Java/Python 代码。

出于使用 C 代码的相同目的,德国慕尼黑工业大学 (TUM) 的一个研究项目创建了一个标准 C 代码生成器,可用于嵌入式 C 项目。这与 Google 的 protobuf 实现完全兼容(由于 C 结构的限制)。这比C 绑定更好,因为它不需要链接任何库。我在让C 绑定在我正在使用的嵌入式系统上工作时遇到了问题,因为它需要与支持库链接。

这为我的嵌入式项目节省了(痛苦的)一天——在嵌入式系统和 Android 应用程序(Java)/桌面应用程序(C++/Qt)之间传递复杂的网络数据(请求-响应)。

于 2014-09-01T13:29:03.307 回答