2016-08-19 51 views
0

我剛開始學習java。我有兩個實現服務器套接字的項目。在服務器項目中,服務器根據客戶端發送的操作名稱進行響應。 操作是 DIR - 發送服務器目錄中的文件(文件[]) CD - 當前目錄名(字符串)如何在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; 

}

現在我怎麼能確定的客戶端是什麼類型的對象?

Client.java

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

但這是拋出異常ClassCastException異常。然後我試着

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

然後這顯示EOFException。我該如何解決這個問題?或者更好的方法?

回答

0

Java中的每個對象都會擴展Object類,所以您的條件無法區分您嘗試識別的內容。此外,您需要檢查一個對象是否從流中返回,現在您只是處理可能爲null的對象。

+0

解決,但如果我發送CD操作必須首先如果塊匹配。我曾嘗試File.class而不是Object.class仍然無法正常工作 –

0

如果使用

in.readObject() 

然後用這將清空stream.So這就是爲什麼它被拋出EOFException類之後。

我一直在使用這個

Object response = in.readObject(); 
if(response.getClass() == String.class){ 
    // code to run 
} 
else { 
    // code to run 
} 
相關問題