如何在java中处理服务器套接字中的不同响应类型

时间:2016-08-19 09:08:11

标签: java sockets

我刚刚开始学习java。我有两个实现服务器套接字的项目。在服务器项目中,服务器根据客户端发送的操作名称进行响应。 运营是 dir - 发送服务器目录文件(File []) cd - 当前目录名称(字符串)

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。我怎么解决这个问题?还是更好的方法?

2 个答案:

答案 0 :(得分:0)

Java中的每个对象都扩展了Object类,因此您的条件无法区分您要识别的内容。此外,您需要检查是否从流返回了一个对象,此时您正在处理可能为null的对象。

答案 1 :(得分:0)

如果您使用

in.readObject()

然后在使用它之后将清空流。这就是为什么它会抛出EOFException。

我已经解决了使用这个

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