特定のヘッダーとデータ本文を期待するCアプリケーションとソケットを介して接続しようとしていますが、その形式に準拠しようとすると、次のような問題が発生します。
ヘッダー:
-パケット開始用に2バイト。
-パケットサイズとヘッダーを示す4バイト。
-パケットタイプの場合は1バイト。
本文:
-パラメータの量を示す4バイト。
パラメータごとに次の1つのブロック:
-パラメータの経度の場合は4バイト。
-メッセージコンテンツのXバイト。
-エスケープ文字の場合は1バイト。
サーバーが期待していることの例を次に示します。
[%%] [13 00 00 00] [0] [12 00 00 00] [0b 00 00 00] [OPERATIONPERFORMED \ 0]
私が抱えている問題は、PrintWriterを介して情報を送信しようとすると、もう一方の端が実際の値ではなくASCII文字として16進値を取得することです。私はすでにByteBuffer、DataOutputStream、およびいくつかのオプションを試しましたが、それでもそれらはその形式で、またはさらに奇妙な形で出てきています。
私が調査していることから、エンディアンが反転しているように見えるので、正しいバイトを取得しますが、順序が間違っています。
私が今試している実装は次のとおりです。
DataOutputStream stream = new DataOutputStream(socket.getOutputStream());
PrintWriter writer = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Header
stream.writeChar(37);
stream.writeChar(37);
stream.writeInt(26);
stream.writeChar('\\0');
stream.writeInt(1);
stream.writeInt(11);
stream.writeUTF("SET_PROBLE\\0");
stream.flush();
StringBuilder sb = new StringBuilder();
boolean state = true;
while (state) {
if (in.ready()) {
sb.append((char) in.read());
}
else {
if (sb.length() > 0) {
state = false;
}
}
}
System.out.println(sb.toString().trim());
}
あなたは私を助けることができます?
よろしくお願いします!