@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

URLConnectionクラスのgetInputStream()メソッドでの時間切れ?

1
投稿者投稿内容
タンちゃん
会議室デビュー日: 2004/04/02
投稿数: 19
投稿日時: 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 ]
ZZZ
会議室デビュー日: 2002/06/26
投稿数: 5
投稿日時: 2005-02-23 19:25
URLConnectionでは出来なさそうだったので、
SocketクラスのsetSoTimeout()で
タイムアウトを設定して実装したことがあります。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-02-23 23:01
JDK1.5 からは URLConnection#setReadTimeout() というメソッドが追加されました。

でも、この場合は「何か変更があったときにサーバ側から push する」(サーバとクライアントを逆にする)とか、
「最終更新情報ページ」みたいなものを用意して双方が利用する(RSS がこの考え)、とか設計を変えたほうがいいような気がしますけど。
タンちゃん
会議室デビュー日: 2004/04/02
投稿数: 19
投稿日時: 2005-02-24 17:56

 皆さん返事ありがとうございます。

 タイムアウトの設定方法が分かりました。

 クライアントに下記の設定を行うと
  設定:System.setProperty("sun.net.client.defaultReadTimeout", "3000");

 リクエストを出して3000ミリ秒の間サーバから応答がない場合
  −java.net.SocketTimeoutException: Read timed out
 をだしてくれます。

 これで、解決できたと思います。

 皆さん色々ありがとうございました。

 タンちゃん
1

スキルアップ/キャリアアップ(JOB@IT)