我有一个套接字,其中服务器在JAVA中,但客户端在C ++中。
Struct{
float length;
char[] name;
}myStruct;
如何将结构转换为Server发送的字节流,并且客户端可以正确解析?任何示例代码都会有帮助! (我听说XML是一个选项,但我不熟悉它)谢谢。
答案 0 :(得分:9)
尝试使用Google代码protocol buffers页面上托管的Google ProtocolBuffers。小巧,高效,python,Java和C ++支持。听起来很适合你的需求。
比XML方法更少的开销,并且比滚动自己的方法更好 - 它比你想象的要难。
答案 1 :(得分:2)
XML不做魔术
你可以使用XML或纯文本
要做到这一点,想想你在处理文件方面做了什么
你会用jave将数据写入文件
那么你可以使用c ++来读取这个文件。
我不会建议你自己为繁重的任务实现序列化
您可以考虑使用JNI / JNA 更好的方法是使用corba,但这可能是一种矫枉过正的
答案 2 :(得分:2)
基于@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;
}
答案 3 :(得分:1)
使用JSONRPC http://www.json.org/
非常容易生成,非常容易解析。主页上有开箱即用的库。
答案 4 :(得分:0)
为简单起见考虑JSON(类似于JSONRPC,或者只是滚动你自己的JSON) 为了复杂的节俭