2011-10-29 14 views
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 

タイムアウトやサーバーが一定時間後に返信しない場合に、アプリケーションが応答を待って停止し、他の実行を継続する必要があることを、いくつかの他の方法を設定する方法はありますか?

答えて

4

私はお勧めします。Socket.setSoTime(timeout)

+2

これは、しかし、行全体を読むことでタイムアウトしません。クライアントがバイトを送信し続けても、行を終了しない場合はどうなりますか? – grom

+0

@gromそれは危険です。クライアントは常にメモリ不足の原因となる無限のデータを送信できます。カスタム処理が必要な場合は、コードを自分で記述する必要があります。 –

+0

@gromループ中に自分でRead()を使うことができます。そのメソッドは1文字だけを読み込みます。それをタイムアウトと組み合わせると、あなたが望むことができるはずです。 「コードを自分で書く」とはまったく同じです:) –

関連する問題