Java で単純なプロキシを作成しています。特定のリクエスト全体をバイト配列に読み取るのに問題があります。具体的には、次のループでは、クライアントが必要なすべてのデータを送信したにもかかわらず、'read' の呼び出しがブロックされます (つまり、ストリームの最後に到達することはありません)。入力全体を読み取るまで、出力を書き始める時期かどうか確信が持てないため、これが少し問題を引き起こしています。サーバーへの接続を切断すると、最終的にストリームの終わりに到達し、すべてが問題なく終了します (この場合は Firefox が www.google.com を要求しているクライアントからのすべてのデータがサーバーによって読み取られています)。 、必要に応じて処理できますが、明らかにクライアントに何も送り返すことはできません)。
public static void copyStream(InputStream is, OutputStream os) throws IOException
{
int read = 0;
byte[] buffer = new byte[BUFFER_SIZE];
while((read = is.read(buffer, 0, BUFFER_SIZE)) != -1)
{
os.write(buffer, 0, read);
}
return;
}
InputStream は、クライアント ソケット (getInputStream() の後にバッファリング) から直接取得されます。OutputStream は ByteArrayOutputStream です。
私は何を間違っていますか?