2016-08-19 1 views
0

Ich habe gerade angefangen, Java zu lernen. Ich habe zwei Projekte, die Server-Socket implementieren. Im Serverprojekt antwortet der Server basierend auf einem Vorgangsnamen, den der Client sendet. Operationen sind dir - aktuelle Verzeichnisname (String)wie mit verschiedenen Antworttyp in Server-Socket in Java

Server.java

Socket client = serverSocket.accept(); 
DataInputStream in = new DataInputStream(client.getInputStream()); 
ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream()); 
String operation = in.readUTF(); 
System.out.println("Performing opration : " + operation); 
switch (operation) { 
    case "dir": 
     File[] lstOfFiles = folder.listFiles(); 
     out.writeObject(lstOfFiles); 
     break; 
    case "cd": 
     out.writeObject(new String("Current Directory : " + currentDir)); 
     break; 

}

Nun, wie kann ich auf die Identifizierung - Serververzeichnis Dateien (File []) cd senden Client-Seite Was ist das Objekt des Typs?

Client.java

ObjectInputStream in = new ObjectInputStream(client.getInputStream()); 
File[] lstOfFiles = (File[]) in.readObject(); 
if(lstOfFiles !=null) 
    System.out.println("Total : " + lstOfFiles.length); 

Aber diese Ausnahme Classcast wirft. Dann habe ich versucht

if ((in.readObject()).getClass() == String.class) { 
    System.out.println((String)in.readObject()); 
} 
else if (in.readObject().getClass() == Object.class) { 
    File[] lstOfFiles = (File[]) in.readObject(); 
    if(lstOfFiles !=null) 
     System.out.println("Total : " + lstOfFiles.length); 
} 

Dann zeigt dies EOFException. Wie kann ich das lösen? oder ein besserer Ansatz?

Antwort

0

Jedes Objekt in Java erweitert die Object-Klasse, sodass Ihre Bedingung nicht davon abweichen kann, was Sie zu erkennen versuchen. Außerdem müssen Sie prüfen, ob ein Objekt aus dem Stream zurückgegeben wurde. Sie arbeiten gerade an einem Objekt, das möglicherweise null ist.

+0

gelöst Aber wenn ich die CD Betrieb sende muss es zuerst, wenn Block übereinstimmen. Ich habe File.class versucht, anstatt object.class immer noch nicht funktioniert –

0

, wenn Sie verwenden

in.readObject() 

dann danach mit dem stream.So leer, deshalb es EOFException wirft.

Ich habe mit diesen

Object response = in.readObject(); 
if(response.getClass() == String.class){ 
    // code to run 
} 
else { 
    // code to run 
} 
Verwandte Themen