我使用的是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。