使用JAVA和C ++通过Socket发送struct

我有一个套接字,其中服务器在JAVA中,但客户端在C ++中。

Struct{ float length; char[] name; }myStruct; 

如何将结构转换为Server发送的字节流,并且客户端可以正确解析? 任何示例代码都会有帮助! (我听说XML是一个选项,但我不熟悉它)谢谢。

尝试使用Google 协议缓冲区 ,该缓冲区位于Google Code的ProtocolBuffers页面上。 小巧,高效,python,Java和C ++支持。 听起来很适合你的需求。

比XML方法更少的开销,并且比滚动自己更好 – 这比你想象的要难。

XML不做魔术
您可以使用XML或纯文本
要做到这一点,想想你曾经使用过哪些文件。
你会使用jave将数据写入文件
然后你可以使用c ++来读取这个文件。

套接字也一样
XML并不特别。 纯文本可以做的工作
XML只添加结构

我不建议你自己为繁重的任务实现序列化

您可以考虑使用JNI / JNA更好的方法是使用corba,但这可能是一种矫枉过正

基于@finnw的回答……

 class MyStruct { float length; String name; } void send(SocketChannel dst, MyStruct ms) throws IOException { int len = 5 + ms.name.length(); ByteBuffer buf = ByteBuffer.allocate(len); buf.putInt(len); buf.putFloat(ms.length); buf.put(ms.name.getBytes("US-ASCII")); buf.put((byte) 0); buf.flip(); dst.write(buf); } 

在C方面

 struct mystruct *readMyStruct(int fd) { uint32_t size; read(fd, &size, sizeof size); struct mystruct *result = malloc(size); read(fd, result, size); return result; } 

使用JSONRPC http://www.json.org/

非常容易生成,非常容易解析。 主页上有开箱即用的库。

为简单起见考虑JSON(类似JSONRPC,或者只是滚动你自己的JSON)
因为复杂的节俭