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

时间:2010-02-04 18:44:12

标签: java c++ sockets byte

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

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

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

5 个答案:

答案 0 :(得分:9)

尝试使用Google代码protocol buffers页面上托管的Google ProtocolBuffers。小巧,高效,python,Java和C ++支持。听起来很适合你的需求。

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

答案 1 :(得分:2)

XML不做魔术 你可以使用XML或纯文本
要做到这一点,想想你在处理文件方面做了什么 你会用jave将数据写入文件
那么你可以使用c ++来读取这个文件。

插座
也是如此 XML并不特别。纯文本可以做工作
XML只添加结构

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

您可以考虑使用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) 为了复杂的节俭