6
私はJavaのソケットを通してPOPサーバからの応答を読み取る次のコードを持っています。しかし、問題は時々、私はサーバーから読み取るためにreadLine()関数を使用し、サーバーが応答で応答しない場合、私のアプリケーションは、サーバーからの応答を待ってそこにハングします。タイムアウト制限をreadLine()に設定していますか?
socket.connect(new InetSocketAddress("pop.server.com", 110), 3000);
input = socket.getInputStream();
BufferedReader incoming = new BufferedReader(new InputStreamReader(input));
incoming.readLine(); //This line will cause my application to hang if the server does not respond with a reply
タイムアウトやサーバーが一定時間後に返信しない場合に、アプリケーションが応答を待って停止し、他の実行を継続する必要があることを、いくつかの他の方法を設定する方法はありますか?
これは、しかし、行全体を読むことでタイムアウトしません。クライアントがバイトを送信し続けても、行を終了しない場合はどうなりますか? – grom
@gromそれは危険です。クライアントは常にメモリ不足の原因となる無限のデータを送信できます。カスタム処理が必要な場合は、コードを自分で記述する必要があります。 –
@gromループ中に自分でRead()を使うことができます。そのメソッドは1文字だけを読み込みます。それをタイムアウトと組み合わせると、あなたが望むことができるはずです。 「コードを自分で書く」とはまったく同じです:) –