如何通过套接字将double或任何其他随机类型从Java传递到C++
How can I pass a double or any other random type from Java to C++ via socket?
我正在开发一个客户端-服务器应用程序,其中服务器是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))
相关文章:
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- 具有相同数据类型代码的相同逻辑代码在 Java 中传递,但不在 C++ 中传递?
- 在C++中返回基元类型数组(Java比较)
- 如何在本机 c++ jni 中实现 java 类型数组
- Java 调用 dll 字符串返回类型方法
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- JNI 如何将 Java 对象数组传递给相同对象类型的 C++ 数组
- Swig:如何将"FILE"类型从 C++ 传递给 Java
- Java 类型的枚举,C++中的自定义值和构造函数
- 使用正确的数据类型转换java中的c++方法逻辑
- jvm在尝试将TCHAR类型发送到接受字符串作为参数的java函数时崩溃
- 为什么 C++ 和 Java 中的构造函数调用需要显式类型参数
- 使用java jni时转换字符串类型
- 为什么Java和C++中的数据类型大小不同
- 您将如何为 std::list<std::string> 创建一个类型映射,以在<String> List in C++ 中为 Java 在 SWIG 中创建?
- 内置于c++/python/java中的抽象数据类型
- 使用JNA将const char**映射到Java类型
- C++中是否有类似于 Java 的 CompareTo 方法,您可以在其中对数据类型使用 > < = 操作
- 将 QByteArray 反序列化为 Java 数据类型
- 将字节数组转换为java类型