1

現在、バイナリデータコマンドをデバイスパネルに送信するJavaクライアントに取り組んでいます。ソケット接続ごとに1つのコマンド(1つのTCPセッション)を送信すると、すべてのコマンドが正常に機能するという奇妙な問題が発生しています。しかし、1つの接続(同じTCPセッション)で複数のコマンドを送信すると、最初のコマンドはデバイスパネルで完全に実行されますが、2番目のコマンドでは値0x01と。を含む2バイトが追加されます0x00。それは奇妙で、私はここ数日試みてきましたが、答えを見つけることができませんでした。

私のコード:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
sslsocket = (SSLSocket) sslsocketfactory.createSocket(deviceIP, port);
//Output Streams
OutputStream outputStream = sslsocket.getOutputStream();

outputStream.write(command1);

outputStream.write(command2);

command1command2はバイト配列であることに注意してください。

  • command1の値=01,01,01
  • command2の値=01,34,45,34,56

デバイスパネルのログは次のとおりです。

Received command: 01 01 01
Received command: 01 00 01 03 45 34 56

何が問題なのですか?あなたの提案は高く評価されます。

4

2 に答える 2

2

SSLSocketを使用するJava6アプリケーションでも同じ問題が発生し、サーバーは2回の書き込みの間に余分なバイトを受信しました。余分なバイトは、SSL接続のCBC保護です。余分なバイトが必要ない場合は、Javaプロパティ-Djsse.enableCBCProtection = falseを追加して、CBC保護を無効にします。

于 2013-06-19T15:51:30.830 に答える
0

JavaとOSは余分なバイトを追加しません。そうでなければ、インターネットの半分は機能しません。明らかに、デバイスが誤動作しているか、誤って観察しています。

于 2012-11-15T22:26:55.617 に答える