我想通过 TCP Socket 将一些复杂的对象从 Java 客户端发送到 C 服务器。
我怎样才能做到这一点 ?
将 Java 对象的字段写入字符串(可能是JSON),通过 TCP 发送它们,然后让 C 程序读取字符串并使用它在另一端初始化新的 C 变量。
这个问题已经很老了,但万一有人还在寻找一个好的解决方案,你可以尝试协议缓冲区的实现,正如@Adam Liss 之前的回答中提到的那样:(developers.google.com/protocol-buffers /)
简而言之,您可以像在协议实现中那样定义任何复杂的消息类型,并且该工具会生成可以序列化和反序列化它的 C++/Java/Python 代码。
出于使用 C 代码的相同目的,德国慕尼黑工业大学 (TUM) 的一个研究项目创建了一个标准 C 代码生成器,可用于嵌入式 C 项目。这与 Google 的 protobuf 实现完全兼容(由于 C 结构的限制)。这比C 绑定更好,因为它不需要链接任何库。我在让C 绑定在我正在使用的嵌入式系统上工作时遇到了问题,因为它需要与支持库链接。
这为我的嵌入式项目节省了(痛苦的)一天——在嵌入式系统和 Android 应用程序(Java)/桌面应用程序(C++/Qt)之间传递复杂的网络数据(请求-响应)。