[Java] TCP-Socket & Object-Input/Output-Stream -> Unkown Source

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Flyde, 21. November 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 21. November 2011
    TCP-Socket & Object-Input/Output-Stream -> Unkown Source

    Hi,

    Wie der Titel schon sagt, habe ich grad ein sehr sehr sehr.. sehr.. sehr.. nervtötendes Problem mit den ObjectStreams in Java.

    Folgender Ablauf meines Programms:
    1. Client verbindet zu Server (klappt)
    2. Client bietet Menüwahl und übergibt Menuitem (als String) an Server (klappt)
    3. Server nimmt sich diesen String und schickt daraufhin ein Objekt an den Client zurück (klappt nicht)
    -> Client schmeißt folgende Exception:
    Code:
    --- Menu ---
    1. Mitarbeiter-Liste
    2. Neuen Mitarbeiter anlegen
    Waehlen Sie: 1
    java.io.EOFException
     at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown
    e)
     at java.io.ObjectInputStream.readObject0(Unknown Source)
     at java.io.ObjectInputStream.readObject(Unknown Source)
     at client.TCPClientConn.receiveMessage(TCPClientConn.java:77)
     at client.Client.main(Client.java:31)
    Wichtigsten Codeteile

    Server
    Code:
     public void MenuInput(String menuItem)
     {
     // Mitarbeiterliste
     if(menuItem == "1") 
     {
     try {
     this.out.writeObject(this.abt1.getMitarbeiter());
     this.out.flush();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
     }
    ...
    Client - receiveMessage
    Code:
     public Object receiveMessage()
     {
     Object data = null;
     try {
     data = this.in.readObject();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     } catch (ClassNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
     return data;
     }
    Client - main()
    Code:
     public static void main(String args[])
     {
     // args[0] = IP, args[1] = PortNumber
     Client client = new Client(args[0], Integer.parseInt(args[1]));
     
     // Menu
     client.Menu();
     
     // Send & Receive Message
     client.sendMessage(client.MenuInput());
     
     ArrayList<Mitarbeiter> mitarbeiter = (ArrayList<Mitarbeiter>)client.receiveMessage();
     System.out.println(mitarbeiter.get(0).getName());
     
     // Close connection
     client.closeTCPConnection();
     }
    Wobei "Client.java(31)" die Zeile client.receiveMessage() in der mainMethode ist und zeile 77 -> data = this.in.readObject();

    Anmerkung:
    die Klasse Abteilung hat "Serializable" implementiert und eine fixe UID

    Hoffe ich hab nichts vergessen.. wenn doch lassts mich wissen
     
  2. 21. November 2011
    AW: TCP-Socket & Object-Input/Output-Stream -> Unkown Source

    Ich bin mir da jetzt nicht 100% sicher, aber die Exception wird doch auf geworfen, wenn das Ende des Objectes erreicht ist, was weißen würde, dass es funktioniert.

    Hast du mal geschaut, ob das Object ankam? ... oder ist es null?!
     
  3. 22. November 2011
    AW: TCP-Socket & Object-Input/Output-Stream -> Unkown Source

    Hm,

    Code:
    System.out.println("Bytes: " + this.in.available());
    Ergebnis - Bytes: 0

    Dennoch guter Tipp.
    Ich such am falschen Ende - mal schauen was da Serverseitig schief gehen könnte
     
  4. 22. November 2011
    AW: TCP-Socket & Object-Input/Output-Stream -> Unkown Source

    Fehler gelöst....

    String a != String b aber String a.equals(String b)

    auf serverseite wurde geprüft welches Menu auf dem Client gewählt wurde.. ich habe String a == String b geprüft -.- Da das ja kein Fehler ist, wurde keine Exception geworfen, erst nachdem der Client dann ein Objekt erwartet aber keins kommt, dann hat er UnknownSource geworfen

    Code:
    if(menuItem.equals("1")) 
    <- das hats gefixed.

    Close.. 4 Stunden Fehlersuche für ein equals..
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.