如何在 c++ 和 java 之间通过 udp 有效发送数据数组

Posted

技术标签:

【中文标题】如何在 c++ 和 java 之间通过 udp 有效发送数据数组【英文标题】:How to send efficiently a data array over udp between c++ and java 【发布时间】:2019-04-15 17:57:01 【问题描述】:

我将通过 udp 套接字发送一个双精度数组。我在 Clinet 端使用 c++ 中的 Winsock 库,在服务器端使用 java。我目前的想法是用这个双数字数据制作一个字符串并发送。但是我觉得这不合适,需要双方转换为数值。如何更有效地发送这些数据?

我尝试了以下但收到错误““双 *”类型的参数与 sendto() 函数中“const char *”类型的参数不兼容”

double arrayTosend[100] 

int sendOk = sendto(out, arrayToSend, sizeof(arrayToSend), 0, (sockaddr*)&server, sizeof(server));

【问题讨论】:

注意:你不能发送原始的double,除非另一台机器使用相同的架构。如果您确实想发送原始值,请将它们转换为字节数组 (const char*),如错误中所述。 【参考方案1】:

我建议您使用Google's Protocol Buffers 来处理数组的传输:

这是一种在远程和内部进程之间序列化/反序列化消息的可靠机制。 易于使用和学习。 它将生成在 c++ 和 java 进程中获取和接收数组所需的代码。 如果您将数组更改为其他类型,或决定传输其他信息 - 协议缓冲区使用的消息格式将允许您轻松更改传输的数据,并将重新生成所有必需的样板代码。

【讨论】:

以上是关于如何在 c++ 和 java 之间通过 udp 有效发送数据数组的主要内容,如果未能解决你的问题,请参考以下文章

linux 中 C++ 中的 UDP Socket 编程

将字节数组从java程序发送到c++

在 C++ 中通过 UDP 发送字符串

通过 UDP 的 C++ 类在 C# 中使用,都有哪些选项?

使用 C++ 和 Qt 通过 UDP 发送 float var

c++编写UDP客户/服务器程序,要求:使用udp服务实现客户端与服务器交互信息.