通用套接字问题-传输C++;从Java到C的结构++;

通用套接字问题-传输C++;从Java到C的结构++;,java,c++,sockets,packet,struct,Java,C++,Sockets,Packet,Struct,我有一个通用的套接字编程问题要问你 我有一个名为Data的C结构: struct data { double speed; double length; char carName[32]; struct Attribs; } struct Attribs { int color; } 我希望能够在java中创建类似的结构,创建一个socket,用上面的结构创建数据包,并把它发送到C++ socket侦听器。 关于序列化数据(基本上

我有一个通用的套接字编程问题要问你

我有一个名为Data的C结构:

struct data {
      double speed;
      double length; 
      char carName[32];
      struct Attribs;
}

struct Attribs {
      int color;
}

我希望能够在java中创建类似的结构,创建一个socket,用上面的结构创建数据包,并把它发送到C++ socket侦听器。 关于序列化数据(基本上是数据包中传输的1和0),您能告诉我什么。C++如何“读取”这些数据包并重新创建结构?这样的结构如何存储在数据包中

总的来说,你能告诉我的任何事情都能给我解决这件事的方法

谢谢

基本过程是:

  • java应用程序在java应用程序中创建一些可移植的结构版本,例如XML
  • java app通过socket /LIX向C++应用程序发送XML
  • C++应用程序从java应用程序接收XML
  • C++应用程序使用XML消息中的数据创建结构实例
      • 如果使用二进制序列化,请厌倦endianness。Sun的JVM是Big-Endian,如果您使用的是Intel x86,那么您使用的是一台小型Endian机器
      • 我将使用Java实现快速的本机序列化。ByteBuffers是NIO库的一部分,因此应该比ol的DataInput/OutputStreams性能更高
      • 对序列化浮动特别厌倦!如上所述,将所有数据通过网络传输到字符串更安全
      • 在C++方面,不管网络如何,在某一点上都会有一个填充的数据缓冲区。因此,您的反序列化代码如下所示:

      • 注意,基本C++类型的大小是实现定义的,所以爪哇和C++中的原始类型不直接翻译。李>
      • 你可以使用缓冲区。如果处理各种数据结构,我的首选解决方案
      • 您也可以使用JSON进行序列化

      我被告知要使用XML模式文件(XSD)。然后使用ant创建一个JavaBean类。java bean类是可序列化的。。。所以我基本上是从JavaBean类发送数据。这是正确的方法吗?在细节方面,如何能够为字符数组或枚举使用XML模拟?顺便说一下,我在哪里可以阅读更多的信息?@ Carlo,你不能直接使用java和C++类型的类比——你的代码必须执行合适的转换。因此,创建bean,让它序列化内容,然后查看它生成的XML。或者,找一个可以为您完成所有这些工作的库,或者使用(抖动)CORBA、SOAP等东西。
      size_t amount_read = 0;
      data my_data;
      memcpy(buffer+amount_read, &my_data.speed, sizeof(my_data.speed))
      amount_read += sizeof(my_data.speed)
      memcpy(buffer+amount_read, &my_data.length, sizeof(my_data.length))
      amount_read += sizeof(my_data.length)