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 - Fatal编程技术网

Java客户端和服务器-多请求

Java客户端和服务器-多请求,java,sockets,Java,Sockets,目前我正在尝试通过Java套接字发送文件。我可以成功地发送特定文件的请求,并将该文件取回。但是,当我尝试在不重新启动程序的情况下再次执行此操作时,我无法执行此操作 这是我的密码: 客户 System.out.print("What file do you want? "); name = consoleIn.readLine(); int bytesRead; if(!name.equals("!")) { InputStream in = null;

目前我正在尝试通过Java套接字发送文件。我可以成功地发送特定文件的请求,并将该文件取回。但是,当我尝试在不重新启动程序的情况下再次执行此操作时,我无法执行此操作

这是我的密码:

客户

System.out.print("What file do you want? ");
    name = consoleIn.readLine();
    int bytesRead;

    if(!name.equals("!")) {

        InputStream in = null;
        OutputStream output = null;
        DataInputStream serverData = null;

        while(!name.equals("!")) {
            socketOut.println(name);
            socketOut.flush();

            InputStream is = null;
            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
            try {
                is = socket.getInputStream();
            } catch (IOException ex) {
                System.out.println("Can't get socket input stream. ");
            }

            try {
                fos = new FileOutputStream(name);
                bos = new BufferedOutputStream(fos);

            } catch (FileNotFoundException ex) {
                System.out.println("File not found. ");
            }

            byte[] bytes = new byte[4000];

            int count;

            while ((count = is.read(bytes)) != -1) {
                bos.write(bytes, 0, count);
            }
            System.out.println("Here");
            bos.flush();


            System.out.print("What file do you want? ");
            name = consoleIn.readLine();
        }    
    }
服务器

socket = serverSocket.accept();
            System.out.println("Connection accepted!");
            BufferedReader socketIn =
                    new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
            String name;
            BufferedReader fileIn;
            String line;
            name = socketIn.readLine();
            System.out.println(name);

            while((!name.equals("!")) && (!name.equals("*"))) {

                File file = new File(rootDirectory, name);

                byte[] bytes = new byte[4000];
                FileInputStream fis = new FileInputStream(file);
                BufferedInputStream bis = new BufferedInputStream(fis);
                BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());

                int count;

                System.out.println("Sending: " + name);
                while ((count = bis.read(bytes)) != -1) {
                    out.write(bytes, 0, count);
                }
                out.flush();
                System.out.println("Sent");
                name = socketIn.readLine();
                System.out.println(name);
            }

没有提示我输入第二个请求。

我很好奇
文件服务器:69
-您正在接受另一个阻止所有进程的用户套接字。 只要从服务器上删除这一行,所有这些都应该可以工作


此外,我建议您为每个已接受的套接字创建一个新线程。

您可以提供更多或全部代码吗?那么它挂在哪里?“这里”是否打印出来?您还需要关闭客户端中的缓冲流。当然可以。这里是pastebins:和@Kayaman我关闭了它,但是新的提示没有出现。我一直在查看PasteBin只是为了弄清楚:)-这里的代码和pastebins之间有一些区别。嘿,谢谢你看一下。我试着取出69号线,但它仍然挂在某处。它不允许我输入新文件。