Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么客户端应用程序不从服务器目录获取文件列表?_Java_Sockets_Stream_Client Server_Client - Fatal编程技术网

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

        }

你误解了我的意思。我想在客户端打印文件列表,而不是在服务器端。问题是,此时文件列表显示在服务器窗口中。您的代码明确地告诉它打印服务器端。如果你想让你的客户机打印出来,你需要构造一个字符串并将它发送回给客户机打印。