如何在 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 有效发送数据数组的主要内容,如果未能解决你的问题,请参考以下文章
通过 UDP 的 C++ 类在 C# 中使用,都有哪些选项?