2017-10-26 6 views
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"); 
    } 
} 

答えて

0

私は答えを見つけました! リクエストを出力した後、

socket.shutdownOutput(); 
関連する問題