2017-10-25 8 views
-1

私はC++ SSLソケットサーバ(32ビットLinux)& javaベースのsslクライアント(Windows 64bit)を使用しています。 SSLハンドシェイクが正常です。 Javaクライアントから文字列データをC++サーバに送信すると、&の表示が得られます。 私は、Javaクライアントから++サーバーCにint型のデータを送信する、異なるデータ私は、Javaのソース送るopenssl java to C++ read int issue

受け付けております:

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バイトで1バイト読み取り:1

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

Wiコードの下番目の、そのは、SSLのwriteIntなし

ByteBuffer bb = ByteBuffer.allocate(4); 
bb.putInt(1000); 

DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 
dos.write(bb.array()); 
dos.flush(); 

は、SSLのwriteIntが働いバイトとしてSSL、書き込みint型と に動作していないとC++ と協力して、C++での作業、バイトとして書き込み。 SSLの場合、writeIntの動作が異なるのはなぜですか?

+0

Googleの[プロトコルバッファ](https://developers.google.com/protocol-buffers/)の使用を検討することもできます。 TLSでメッセージを使用するほうがずっと簡単になります。ワイヤフォーマットとプレゼンテーションについて心配する必要はありません。 – jww

+0

あなたの意味を破壊するコードは編集されなくなりました。 ByteBufferを持つバリアントは無意味です。 – EJP

答えて

0

なぜバイナリデータにWriterを使用していますか? DataOutputStream.writeInt()を使用してください。

そしてもちろん、この:

unsigned int rxdInt = ntohl(result); 

そして、あなたは-1、ゼロ、またはそれ以下だったかもしれないSSL_read()によって返された値を、無視している:

​​

は、このする必要があります4より。

+0

DataOutputStreamでも同じ問題が発生しました。DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); \t \t \t dos.writeInt(1000); –