1
私はサーバーにHTTPリクエストのようなものを送り、サーバーから応答を得ようとしています。クライアントがoutputStreamを閉じないうちに、この時間サーバーは私の要求を読んでいます。そのため、サーバーがクライアントに応答を返すことはできません。それは "deadLock"のようなものです。クライアント側で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");
}
}