Java неверный заголовок потока: 7371007E - PullRequest
2 голосов
/ 31 января 2010

Я создаю клиент-серверное приложение. Теперь я хочу переслать сообщение от клиента всем другим клиентам с этим кодом:

ArrayList<User> usrs = _usrHandler.getUsers();
for(User usr : usrs) {
    if(!usr.getSocket().equals(_connection)) {
        usr._oOut.writeObject(new CommunicationMessage(this._comMsg.getMessage(), CommunicationMessage.MSG, 
                                                    this._comMsg.getUser()));
 }
}

На стороне клиента программа прослушивает сообщения. Выдает это исключение:

java.io.StreamCorruptedException: invalid stream header: 7371007E
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
    at Connection$MessageListener.run(Connection.java:126)
    at java.lang.Thread.run(Thread.java:637)

MessageListener:

             while(this._loop) {
 this._comMsg = (CommunicationMessage) this._dataInput.readObject();

 SimpleAttributeSet attr = new SimpleAttributeSet();
 attr.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
 attr.addAttribute(StyleConstants.CharacterConstants.Foreground, _comMsg.getUser().getColor());

 messageClient.addMessage(_comMsg.getUser().getNickName() + ": ", attr);
 messageClient.addMessage(_comMsg.getMessage(), _comMsg.getUser().getColor());

 _comMsg = null;
}

Кто-то видит ошибку?

1 Ответ

7 голосов
/ 31 января 2010

Вы, вероятно, получили свои потоки в повороте.

Когда вы создаете ObjectInputStream, конструктор считывает первые два байта из потока, ожидая, что они будут «магическими значениями», которые должны присутствовать в потоке объекта. Если их там нет, выдается StreamCorruptedException (это все в исходном коде ObjectInputStream).

Таким образом, может показаться, что вы обернули InputStream в ObjectInputStream, когда фактически данные, поступающие с другого конца соединения, на самом деле не являются потоком объектов. Возможно, он все еще отправляет данные из предыдущего сообщения.

...