I am building a client-server application. Now I want to forward the message from a client to all other client with this code:
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()));
}
}
On the client side the program is listening for messages. It throws this exception:
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;
}
Does someone see the error?
You’ve likely got your streams in a twist.
When you construct an
ObjectInputStream, the constructor reads the first two bytes from the stream expecting them to be the “magic values” that should be present in an object stream. If they’re not there, it throws theStreamCorruptedException(this is all in theObjectInputStreamsource code).So it would appear that you’re wrapper an
InputStreamin anObjectInputStreamwhen in fact the data coming down from the other end of the connection is not actually an object stream. Perhaps it’s still sending data from a previous communication.