通过Socket将复杂对象从Java客户端发送到C服务器

时间:2012-04-18 22:20:55

标签: java c sockets tcp

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

我该怎么做?

3 个答案:

答案 0 :(得分:4)

基本上问题是,“如何序列化/反序列化对象 语言无关的方式?“在你的情况下特别是Java和C.你自己会 要通过网络发送此数据,处理network order/endianness问题也很重要。

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

就个人而言,我会使用Protocol Buffers。 有Java bindingsC bindings

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

这个问题很老了,但是如果有人还在寻找一个好的解决方案,你可以试试协议缓冲区的实现,如前面的回答@Adam Liss所述:( developers.google.com/协议缓冲器/)

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

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

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