簡體   English   中英

openssl java to c++ read int 問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM