openssljava到c++读取int问题



我使用的是c++ssl套接字服务器(32位linux)&基于java的ssl客户端(windows64bit)。SSL握手成功。当我从Java客户端向C++服务器发送字符串数据时;陈列当我从Java客户端向c++服务器发送int数据时,我收到的是不同的数据

Java发送源:

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
osw.writeInt(1000);
osw.flush();

C++readInt来源:

unsigned int result =0;
int byteRead = SSL_read(m_ssl, &result, sizeof(int));
unsigned int rxdInt = htonl(result);

当我逐字节打印读取的字节数:1

Expected: e8 03 00 00 
received : 00 00 00 00 
after htonl: 00 00 00 00

使用下面的代码,以字节形式写入,它可以与c++一起工作

ByteBuffer bb = ByteBuffer.allocate(4); 
bb.putInt(1000); 
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.write(bb.array());
dos.flush();

如果没有SSL,writeInt将使用c++SSL writeInt不工作使用SSL,以字节形式写入int。为什么writeInt行为在SSL情况下不同?

为什么对二进制数据使用Writer?您应该使用DataOutputStream.writeInt()

当然还有这个:

unsigned int rxdInt = htonl(result);

应该是这样的:

unsigned int rxdInt = ntohl(result);

并且您忽略了SSL_read()返回的值,该值可能是-1、零或小于4。

最新更新