java.io.StreamCorruptedException: неверный заголовок потока - PullRequest
2 голосов
/ 06 апреля 2011

Я пишу сокет-клиент, в котором я отправляю данные на сервер (используя getOutputStream ()), ниже мой код

 this.wr = this.socket.getOutputStream();

  wr.write(hexStringToByteArray(messageBody));

wr.flush(); 

Выше можно успешно отправить данные.1) но когда я пытаюсь прочитать ответ, используя

this.in = new ObjectInputStream(this.socket.getInputStream());

Поскольку я не знаю, какой формат возвращает сервер.Получение ошибки в этой строке

"java.io.StreamCorruptedException: неверный заголовок потока".

Я не уверен, почему?Я знаю, что значения, которые я получу, будут в шестнадцатеричном формате, т. Е. Скажем, 600185 будет таким же, как в 60 01 86 ....

Может ли кто-нибудь помочь мне, пожалуйста, чтобы преодолеть эту ошибку.

2) Также в случае, если я не получу никакого ответа по истечении определенного времени, как закрыть сокетное соединение.

Заранее благодарю всех.

1 Ответ

5 голосов
/ 06 апреля 2011

ObjectInputStream ожидает заголовок в потоке, который записывается ObjectOutputStream. Так что если вы используете один, вам нужно использовать оба.

Поскольку вашему примеру на самом деле не нужен ObjectOutputStream, вы можете просто не использовать ObjectInputStream.

что-то вроде:

public void doWrite(Socket socket, String messageBody) {
    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
    byte[] data = hexStringToByteArray(messageBody);

    dos.writeInt(data.length);
    dos.write(data);
    dos.flush();
}

public String doRead(Socket socket) throws IOException {
    DataInputStream dis = new DataInputStream(socket.getInputStream());
    int len = dis.readInt();
    byte[] data = new byte[len];

    dis.read(data);

    return byteArrayToHexString(data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...