请求和响应相互阻塞

时间:2017-10-26 21:11:16

标签: java sockets http

我正在尝试向服务器发送类似HTTP请求的内容,然后从服务器获取响应。在这个时间服务器读取我的请求,而客户端将不会关闭outputStream。这就是服务器无法将响应发送回客户端的原因。它就像“deadLock”。当我尝试在客户端关闭()outputStream时,我在读取响应的行中出现异常,因为Socket连接已关闭。我该如何解决这个问题?谢谢。

客户端:

        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");
    }
} 

1 个答案:

答案 0 :(得分:0)

我找到了答案! 输出请求后,我必须调用

socket.shutdownOutput();