我刚刚开始学习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。我怎么解决这个问题?还是更好的方法?
答案 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
}