私は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の動作が異なるのはなぜですか?
Googleの[プロトコルバッファ](https://developers.google.com/protocol-buffers/)の使用を検討することもできます。 TLSでメッセージを使用するほうがずっと簡単になります。ワイヤフォーマットとプレゼンテーションについて心配する必要はありません。 – jww
あなたの意味を破壊するコードは編集されなくなりました。 ByteBufferを持つバリアントは無意味です。 – EJP