[英]openssl java to c++ read int issue
我正在使用 c++ ssl 套接字服務器(32 位 linux)和基於 java 的 ssl 客戶端(windows 64 位)。 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);
C++ 方面,當我逐字節打印讀取的字節時: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 寫為字節工作。 為什么在 SSL 情況下 writeInt 行為不同?
為什么要使用Writer
來處理二進制數據? 您應該使用DataOutputStream.writeInt()
。
然后當然是這個:
unsigned int rxdInt = htonl(result);
應該是這樣的:
unsigned int rxdInt = ntohl(result);
並且您忽略了SSL_read()
返回的值,該值可能是 -1、零或小於 4。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.