Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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_Http - Fatal编程技术网

Java 请求和响应相互阻塞

Java 请求和响应相互阻塞,java,sockets,http,Java,Sockets,Http,我试图向服务器发送类似HTTP请求的内容,然后从服务器获取响应。此时,服务器正在读取我的请求,而客户端将不会关闭outputStream。这就是服务器无法将响应发送回客户端的原因。这有点像“死锁”。当我试图在客户端关闭()outputStream时,我在读取响应的行中遇到了一个异常,因为套接字连接已关闭。我如何解决这个问题?多谢各位 客户: File file = new File("C:\\Programing\\WebServer\\src\\main\\java\\Clie

我试图向服务器发送类似HTTP请求的内容,然后从服务器获取响应。此时,服务器正在读取我的请求,而客户端将不会关闭outputStream。这就是服务器无法将响应发送回客户端的原因。这有点像“死锁”。当我试图在客户端关闭()outputStream时,我在读取响应的行中遇到了一个异常,因为套接字连接已关闭。我如何解决这个问题?多谢各位

客户:

        File file = new File("C:\\Programing\\WebServer\\src\\main\\java\\Client\\testimg.bmp");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out);
        long length = file.length();

        Files.copy(file.toPath(), out);

        out.flush();

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder stringBuilder = new StringBuilder();
        String s;
        while ((s = reader.readLine())!=null)
            stringBuilder.append(s);
        System.out.println(stringBuilder.toString());
服务器端:

System.out.println("Handle started");

        try {

            DownloadingFile downloadingFile = new DownloadingFile();
            downloadingFile.downloadFile(in);

           writingResponse(out, "OK");
           out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
在服务器端附加类中:

public class DownloadingFile {
    public void downloadFile(InputStream in) throws IOException {
        FileOutputStream outputStream = new FileOutputStream("C:\\Programing\\WebServer\\src\\main\\java\\Server\\Messages\\testingimg.bmp");
        int c;
        while ((c = in.read()) != -1) {
            outputStream.write(c);
        }
        outputStream.flush();
        System.out.println("Downloaded");
    }
} 
我找到了答案! 输出请求后,我必须调用

socket.shutdownOutput();
我找到了答案! 输出请求后,我必须调用

socket.shutdownOutput();