我正在开发一个客户端-服务器应用程序,其中服务器是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))