java - 一般套接字问题 - 将 C++ 结构从 Java 转移到 C++

标签 java c++ sockets packet struct

我有一个一般的套接字编程问题要问你。

我有一个名为 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用于快速 native 序列化。 ByteBuffers 是 NIO 库的一部分,因此据称比旧的 DataInput/OutputStreams 具有更高的性能。
  • 尤其厌倦序列化 float !如上所述,通过网络将所有数据传输为字符串会更安全。
  • 在 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 Protocol缓冲器。如果处理各种数据结构,我的首选解决方案。
  • 您也可以使用 JSON 进行序列化。

关于java - 一般套接字问题 - 将 C++ 结构从 Java 转移到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50107389/

相关文章:

php - 是否可以在 PHP 中使用 TCP/IP 套接字访问本地打印机?

java - 代理 Java Web 服务

java - 如何检查执行程序服务中的所有线程是否已完成

java - Map 类的 onCreate() 和 onMapReady() 函数从未运行

c++ - 如何使用 boost::asio 来抽象文件描述符?

windows - 我一次可以打开多少个 TCP 套接字?

JAVA - SPARK - saveAsTextFile 无法应用于 '(java.lang.String, org.apache.hadoop.io.compress.CompressionCodec)'

替换自身的 C++ 类?

c++ - 从线程池调用时,boost 的 io_service 是否共享请求线程?

c++ - ZeroMQ 是否有数据到达时的通知/回调事件/消息?