如何通过套接字将double或任何其他随机类型从Java传递到C++

How can I pass a double or any other random type from Java to C++ via socket?

本文关键字:Java 类型 C++ 随机 其他 套接字 何通过 double 任何      更新时间:2023-10-16

我正在开发一个客户端-服务器应用程序,其中服务器是C++,客户端是Java。

为了与它们通信,我使用套接字。现在,我可以通过这个套接字成功地传输字符串:

客户端:

public void serializeAndSendMessage(String msg) {
    try {
        os.write( msg.getBytes() );
        os.flush();
    }
    catch ( Exception e ) {
        e.printStackTrace();
    }
}

服务器端:

char recvbuf[DEFAULT_BUFLEN];
int iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
    if (iResult > 0) {
        printf("Bytes received: %dn", iResult);
        recvbuf[iResult] = 0; //set the end of the msg

如何传递其他数据,如Double或Int?是否可以将Double转换为String,然后在C++服务器中将其从char转换回Double?

Thanx。

真的想要像Google ProtocolBuffers这样的东西,它以跨平台和跨语言的方式处理任意数据结构的序列化反序列化

还有其他库提供了ProtoBuf的替代方案,如Apache-frif(其中一些库添加了ProtoBaf缺少的网络)。也就是说,ProtoBuf是一个不错的选择,因为它是成熟的,由谷歌自己使用,并以Java和C++作为核心语言,提供第一层支持。

在Java方面,执行以下操作来获取字节:

public static byte[] toByteArray(double value) {
    byte[] bytes = new byte[8];
    ByteBuffer.wrap(bytes).putDouble(value);
    return bytes;
}
...
os.write(toByteArray(1.234));
os.flush()

然后,在C++方面,你可以像这样把它拿出来:

double received;
memcpy(&received, recvbuf, sizeof(double))