常规套接字问题 – 将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消息中的数据创建结构实例