StringCorruptedException: invalid String header

  • Themenstarter Themenstarter Alex
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

Alex

Gast
Hi Leute,

ich bastele zur Zeit an einem Messenger fürs LAN. Allerdings bekomme ich immer wenn der Server die Userliste an
den Client sendet eine StreamCorruptedException: Invalid Stream Header beim Client.
Aber vielleicht hat ja jemand von euch sich mit diesem Fehler schon mal rumgeschlagen und kann mir helfen.


Das ist die Funktion die für das Senden der Userliste auf der Serverseite zuständig ist.

Code:
public void sendUserList() {
		
     messageVektor = new Vector();		
     synchronized(messageVektor) {
			
          messageVektor.add("[/User_List]");
		
          for(Enumeration e = m_vectorClients.elements(); e.hasMoreElements();) {
               ClientSocket clientSocket = (ClientSocket)e.nextElement();
								
               try {
                    messageVektor.add(clientSocket.getNickname());			
               }
               catch(Exception ioex) {
                    log("Server(sendUserList|Exception): " + String.valueOf(ioex));
               }		
          }
     
          messageVektor.add("[/End_User_List]");
     }
     
     for(Enumeration e = m_vectorClients.elements(); e.hasMoreElements();) {
          ClientSocket clientSocket = (ClientSocket)e.nextElement();
          try {
               o_stream = clientSocket.getSocket().getOutputStream();
               os = new ObjectOutputStream(o_stream);
               os.writeObject(messageVektor);	
               os.flush();
               log("UserList send");				
          }
          catch(IOException ioex1) {
               log("Server(sendUserList|IOException): " + String.valueOf(ioex1));
          }			
     }						
}


Und das hier ist ein Teil des Client Thread der die Nachrichten annimmt.

Code:
...

public void run() {
     m_client.log("ClientThread run");
     String temp = new String();
     temp=null;
     messageVektor = new Vector();
     String strBuffer = new String("0");
		
     while(strBuffer!=null) {
     try {									
          i_stream = m_socket.getInputStream();
          ios = new ObjectInputStream(i_stream);
				
          try {
               try {					
                    m_client.log("Versuche messageVektor einzulesen");
                    try {	
                         messageVektor = (Vector)ios.readObject(); //bei dieser 
               //Programmzeile springt das Programm in catch(IOException)
       
                         m_client.log("messageVektor wurde eingelesen");					    }
	    catch(OptionalDataException opex) {
	         m_client.log("Optional Data found");
	     }

...

Ich habe hier nicht den kompletten Code von diesem Thread aufgeführt weil das vielleicht
ein wenig lang ist und nicht unbedingt zur Lösung des Problems beigetragen hätte.
Deshalb kann man hier auch das catch(IOException) nicht sehen.

Gruß

Alex
 
Hi,

springt das Programm erst beim zweiten Durchlauf der while-Schleife raus? (Client)
Wenn ja, dann versuche mal folgendes. Zieh die Initialisierung des ObjectInputStreams aus
der Schleife raus.

Code:
i_stream = m_socket.getInputStream(); 
ios = new ObjectInputStream(i_stream); 
     while(strBuffer!=null) {

Wenn es so geht, schreib mal zurück.
 
Hi René,

so funktionierts. Vielen dank für die Hilfe.
Allerdings habe ich keine Ahnung warum das jetzt läuft wo ich die initialisierung woanders hingeschrieben habe.

Gruß

Alex
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben