3 Stimmen

Java ungültiger Stream-Header: 7371007E

Ich bin dabei, eine Client-Server-Anwendung zu erstellen. Jetzt möchte ich die Nachricht von einem Client an alle anderen Clients mit diesem Code weiterleiten:

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()));
 }
}

Auf der Client-Seite wartet das Programm auf Nachrichten. Es löst diese Ausnahme aus:

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;
}

Sieht jemand den Fehler?

9voto

skaffman Punkte 389758

Wahrscheinlich haben Sie einen Knoten in den Beinen.

Wenn Sie eine ObjectInputStream Der Konstruktor liest die ersten beiden Bytes aus dem Stream und erwartet, dass es sich dabei um die "magischen Werte" handelt, die in einem Objektstream vorhanden sein sollten. Wenn sie nicht vorhanden sind, wird die StreamCorruptedException (dies alles steht in der ObjectInputStream Quellcode).

Es hat also den Anschein, dass Sie einen Wrapper InputStream in einem ObjectInputStream wenn die Daten, die vom anderen Ende der Verbindung kommen, in Wirklichkeit kein Objektstrom sind. Vielleicht sendet es noch Daten von einer früheren Kommunikation.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X