Java 为什么客户端应用程序不从服务器目录获取文件列表?
在我的客户机-服务器应用程序中,我试图打印出服务器当前目录中的文件列表。此时,我的程序能够检索文件名并显示,但问题是,文件列表的结果显示在服务器窗口中,这是我所不期望的 我希望,只要我从客户端发送相应的命令,它就应该返回客户端同一窗口中列出的文件 我正在编写的代码是: 服务器类:Java 为什么客户端应用程序不从服务器目录获取文件列表?,java,sockets,stream,client-server,client,Java,Sockets,Stream,Client Server,Client,在我的客户机-服务器应用程序中,我试图打印出服务器当前目录中的文件列表。此时,我的程序能够检索文件名并显示,但问题是,文件列表的结果显示在服务器窗口中,这是我所不期望的 我希望,只要我从客户端发送相应的命令,它就应该返回客户端同一窗口中列出的文件 我正在编写的代码是: 服务器类: package server; import java.io.*; import java.net.*; public class AreaServer { private static final in
package server;
import java.io.*;
import java.net.*;
public class AreaServer {
private static final int PORT = 8000;
private ServerSocket serverSocket;
public static void main(String[] args) {
int port = PORT;
if (args.length == 1) {
port = Integer.parseInt(args[0]);
}
new AreaServer(port);
}
public AreaServer(int port) {
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
System.err.println("Error in creation of the server socket");
System.exit(0);
}
while (true) {
try {
Socket socket = serverSocket.accept();
DataInputStream inputFromClient = new DataInputStream(socket.getInputStream());
DataOutputStream outputToClient = new DataOutputStream(socket.getOutputStream());
while (true) {
String commandPWD = inputFromClient.readUTF();
String workingDir = System.getProperty("user.dir");
outputToClient.writeUTF(workingDir);
String commandGetList = inputFromClient.readUTF();
file)
File fileList = new File(".");
getFiles(fileList);//method calling
outputToClient.writeUTF(fileList.toString());
}
} catch (IOException e) {
System.err.println(e);
}
}
}
private static void getFiles(File fileList) {
File[] listOfFile = fileList.listFiles();
for (File f : listOfFile) {
if (f.isDirectory()) {
System.out.println(f.getName());
}
if (f.isFile()) {
System.out.println(f.getName());
}
}
}
}
客户端类:
package clint;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class AreaClient {
private static final int PORT = 8000;
private static final String SERVER = "194.47.46.146";
public static void main(String[] args) {
String server = "localhost";
int port = PORT;
if (args.length >= 1) {
server = args[0];
}
if (args.length >= 2) {
port = Integer.parseInt(args[1]);
}
new AreaClient(server, port);
}
public AreaClient(String server, int port) {
DataInputStream inputFromServer;
DataOutputStream outputToServer;
try {
Socket socket = new Socket(server, port);
inputFromServer = new DataInputStream(socket.getInputStream());
outputToServer = new DataOutputStream(socket.getOutputStream());
Scanner sc = new Scanner(System.in);
System.out.println("Enter pwd command: ");
while (sc.hasNext()) {
String commandPWD = sc.nextLine();
outputToServer.writeUTF(commandPWD);
outputToServer.flush();
String workingDir = inputFromServer.readUTF();
System.out.println("Working directory is: " + workingDir);
System.out.println("Enter getList command: ");
String commandGetList = sc.nextLine();
outputToServer.writeUTF(commandGetList);
outputToServer.flush();
String listedFileFromSErver = inputFromServer.readUTF();
System.out.println("You have the following files in the server directory: " + listedFileFromSErver);
}
inputFromServer.close();
outputToServer.close();
socket.close();
} catch (IOException e) {
System.err.println(e);
}
}
}
它正在打印文件列表,因为getFiles方法要求
if (f.isDirectory()) {
System.out.println(f.getName());
}
if (f.isFile()) {
System.out.println(f.getName());
}
你误解了我的意思。我想在客户端打印文件列表,而不是在服务器端。问题是,此时文件列表显示在服务器窗口中。您的代码明确地告诉它打印服务器端。如果你想让你的客户机打印出来,你需要构造一个字符串并将它发送回给客户机打印。