常规套接字问题 – 将C ++结构从Java转移到C ++

我有一个通用套接字编程问题。

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

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

我希望能够在Java中创建一个类似的结构,创建一个套接字,使用上面的结构创建数据包,并将其发送到C ++套接字监听器。

你能告诉我有关序列化数据的信息(基本上,数据包中传输的1和0)。 C ++如何“读取”这些数据包并重新创建结构? 这样的结构如何存储在数据包中?

一般来说,你可以告诉我任何有关如何解决这个问题的想法。

谢谢!

  • 如果使用二进制序列化,请厌烦字节序。 Sun的JVM是Big Endian,如果你使用的是Intel x86,那么你就是一台小端机器。
  • 我会使用Java的ByteBuffer进行快速本机序列化。 ByteBuffers是NIO库的一部分,因此据称比ol’DataInput / OutputStreams具有更高的性能。
  • 特别厌倦序列化花车! 如上所述,将所有数据传输到线上的字符串更安全。
  • 在C ++方面,无论网络如何,您都会在某个时刻拥有填充的数据缓冲区。 因此,您的反序列化代码将类似于:

 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) 
  • 请注意,基本C ++类型的大小是实现定义的,因此Java和C ++中的原始类型不会直接转换。
  • 您可以使用Google协议缓冲区。 如果处理各种数据结构,我的首选解决方案。
  • 您也可以使用JSON进行序列化。

基本过程是:

  • java app在java app中创建了一些可移植版本的结构,例如XML
  • java app通过套接字将XML发送到C ++应用程序
  • C ++应用程序从Java应用程序接收XML
  • C ++应用程序使用XML消息中的数据创建结构实例