- - PR -
URLConnectionクラスのgetInputStream()メソッドでの時間切れ?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-02-23 18:25
皆さん、こんにちは!!
JAVAアプリとサーブレット間の通信ソフトを開発していますが、 質問がありまして、書き込みます。 環境) @JAVAアプリ(クライアント) Windows2000 professional sp4 J2SDK1.4.1_05 Aサーブレット(サーバ) Windows2000 professional sp4 J2SDK1.4.1_05 作業内容) −JAVAアプリからサーバの状態を監視して、サーバに何かの変化があった場合 人間に通知する機能。 @JAVAアプリ(クライアント)がサーバにHTTPリクエストをだす。 Aサーブレット(サーバ)はリクエストを受け取って、色々作業を行って その結果(OK/NG)をHTTPレスポンスとしてJAVAアプリに返す。 Bサーバからのレスポンスを受け取ったクライアントは返された結果を 元として処理を行い、作業は終了。 C‘@〜B’の作業を1分間隔で繰り返して実行している 質問) @URLConnectionクラスのgetInputStream()メソッドの戻り値がない場合 Exceptionを起こす方法が知りたい。 −説明 )クライアントがサーバに対してリクエストを行う )サーバはクライアントからリクエストを受け取ってから処理を開始 )クライアントにレスポンスを返す前にサーバで問題が発生したため処理が止まる (原因不明:他の会社のアプリのメソッドを使ってますが、そこでしんじゃいますTT) )クライアントはサーバからのレスポンスがないため待ちっぱなしになる。 −下記の‘@-- --@’の部分がクライアントがサーバに対してリクエストを 要求している部分です。 サーバから(ある程度の時間)のレスポンスがない場合、クライアントで エラーとして扱おうとしています。 URLConnectionクラスのgetInputStream()メソッドでの機能で時間切れを設定する 方法はないのですか? ソース) ------------------------------------------------------------------------------------------ 省略… URL theURL = new URL("http://xxxxxxxxx"); URLConnection theURLconn = theURL.openConnection(); theURLconn.connect(); @--- BufferedReader in = new BufferedReader( new InputStreamReader( theURLconn.getInputStream())); ---@ String inputLine; while ((inputLine = in.readLine()) != null){ r = inputLine; } 省略… ------------------------------------------------------------------------------------------ 以上です。 宜しくお願いします。 タンちゃん [ メッセージ編集済み 編集者: タンちゃん 編集日時 2005-02-23 18:33 ] |
|
投稿日時: 2005-02-23 19:25
URLConnectionでは出来なさそうだったので、
SocketクラスのsetSoTimeout()で タイムアウトを設定して実装したことがあります。 |
|
投稿日時: 2005-02-23 23:01
JDK1.5 からは URLConnection#setReadTimeout() というメソッドが追加されました。
でも、この場合は「何か変更があったときにサーバ側から push する」(サーバとクライアントを逆にする)とか、 「最終更新情報ページ」みたいなものを用意して双方が利用する(RSS がこの考え)、とか設計を変えたほうがいいような気がしますけど。 |
|
投稿日時: 2005-02-24 17:56
皆さん返事ありがとうございます。 タイムアウトの設定方法が分かりました。 クライアントに下記の設定を行うと 設定:System.setProperty("sun.net.client.defaultReadTimeout", "3000"); リクエストを出して3000ミリ秒の間サーバから応答がない場合 −java.net.SocketTimeoutException: Read timed out をだしてくれます。 これで、解決できたと思います。 皆さん色々ありがとうございました。 タンちゃん |
1