我有一个客户端 - 服务器拓扑,客户端要求在服务器上的当前工作目录中列出目录或文件,服务器会回复相应的信息。
查看客户端代码
controlSocket.writeByte(LSDIR);
int dirCount = controlSocket.readInt();
Map<String, Long> dirMap = new HashMap<>();
for (int i = 0; i < dirCount; i++) {
dirMap.put(controlSocket.readString(), controlSocket.readLong());
}
和服务器代码
dir = new File(cwd);
output.writeInt(dir.listFiles(File::isDirectory).length);
for (File file : dir.listFiles(File::isDirectory)){
output.writeUTF(file.getName());
output.writeLong(file.lastModified());
}
现在,当我不更改服务器上的目录时,无论我多少次调用它,目录列表都可以正常工作。但是,如果我使用此客户端代码
controlSocket.writeByte(CD);
controlSocket.writeString(path);
和此服务器代码
String inputDir = input.readUTF();
if (inputDir.equals("..")) {
cwd = cwd.substring(0, cwd.lastIndexOf("/"));
} else {
cwd += "/" + inputDir;
}
目录列表运行但是从套接字读取的整数不是服务器发送的整数(例如,在服务器上我看到1被发送,但在客户端上读取的内容如16777216)。服务器没有问题地读取目录内容,因此这方面没有问题。
似乎数据I / O流不一致,否则我错过了某些东西。请注意,客户端和服务器都在同一台计算机上运行。
答案 0 :(得分:0)
问题是服务器在更改目录后写了一个额外的确认布尔值,客户端将其作为整数读取。
所以这里的代码没有任何问题。