我正在尝试通过套接字与需要特定标头和数据主体的 C 应用程序连接,但是,在尝试遵守该格式时遇到了很多问题,应该是这样的:
标头:
- 2 个字节用于数据包开始。
- 4 个字节,表示数据包大小加上标头。
- 1 个字节用于数据包类型。
正文:
- 4 个字节,表示参数的数量。
每个参数的一个块:
- 参数经度的 4 个字节。
- X 字节的消息内容。
- 1 个字节用于转义字符。
这是服务器期望的示例:
[%%][13 00 00 00][0][12 00 00 00][0b 00 00 00][OPERATIONPERFORMED\0]
我遇到的问题是,当尝试通过 PrintWriter 发送信息时,另一端将十六进制值作为 ASCII 字符而不是实际值获取。我已经尝试过使用 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());
}
你能帮我吗?
提前非常感谢!