DoJa携帯アプリ側の通信タイムアウト処理をInputStreamが256byteずつ読み込むループの中で

通信開始から1分間応答が無い場合を判定して行っています。
しかし、「サーバから1byteも反応がない」状況だと「256byteずつ読み込むループ」がループ
しない為タイムアウト判定が出来ません。

これを解決するには、別スレッドで時間管理をする方法があると思います。

しかし携帯アプリの容量が既にいっぱいいっぱいな為、なるべく他の方法で解決したいです。

何か良いアイデアがあったら教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/09/16 12:42:42
  • 終了:--

回答(4件)

id:upride No.1

upride回答回数220ベストアンサー獲得回数12004/09/16 13:16:53

ポイント17pt

urlダミーです

[想像の処理]

通信処理クラス {

 もし通信が発生したら {

  256kbずつ読込ループ {

   一分間通信が途絶えたら {

    通信タイムアウト処理 {

     エラー表示

    }

   }

  }

 }

}

[こんな風にすると良いのではの処理]

通信処理クラス {

 ・通信が発生してもしなくても処理フラグと開始時間を取得

 ループ{

  もし通信が発生したら {

   256kbずつ読込ループ {

    通信が処理時間から1分以上ないなら{

     通信タイムアウト処理 {

      ・エラー表示

     }

    }

    ・読込み処理+処理時間取得

   }

  }

  通信が開始時間から1分以上ないなら{

   通信タイムアウト処理 {

    ・エラー表示

   }

  }

 }

}

ものすごく私が勘違いして

イメージ違う場合は勘弁して下さいw

id:kunitz

ありがとうございます!

 ループ{

  もし通信が発生したら {

   256kbずつ読込ループ {

    通信が処理時間から1分以上ないなら{

     通信タイムアウト処理 {

      ・エラー表示

     }

    }

    ・読込み処理+処理時間取得

→★ここの読込ループの間で「サーバが死ぬ」「通信圏外」なって、

 ループが回らなかった場合の事をかんがえています。

   }

  }

  通信が開始時間から1分以上ないなら{

   通信タイムアウト処理 {

    ・エラー表示

   }

  }

 }

2004/09/16 14:30:16
id:tsekine No.2

tsekine回答回数19ベストアンサー獲得回数02004/09/16 14:55:09

ポイント17pt

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/Socket.html...

Socket (Java 2 プラットフォーム SE v1.4.0)

(int)

DoJa携帯アプリっつーのが分かっていませんが(汗)、要はループの途中で処理がブロックしてしまうのですよね?

read でタイムアウトが発生したら Exception を throw するようにしてあげるだけでは駄目ですか?

id:kunitz

ありがとうございます!

>read でタイムアウトが発生したら Exception

それは、サーバでタイムアウトコードがレスポンスされたということでしょうか?

readでタイムアウトってどうやって判断するんでしょう?

2004/09/16 15:02:06
id:tsekine No.3

tsekine回答回数19ベストアンサー獲得回数02004/09/16 15:10:01

ポイント18pt

API の 47 ページ(Acrobat上では53/340)を参照

ちゃんと J2ME CLDC の API リファレンスを読んでみました。

.read() を call する前に .available() で

0 バイトかどうか(データがあるかどうか)チェックし、データがある場合だけ .read() を、そうでない場合は数十ミリ秒 sleep (J2MEでsleepできるかはまだ調べ中)して…

というループにすればよいかと。

調べ方が中途半端ですが、とりあえず。

id:kunitz

ありがとうございます!

>数十ミリ秒 sleep (J2MEでsleepできるかはまだ調べ中)して

なるほどです。

readを何回かループでまわした後、

つまり全体のバイト数のうち途中まで読み込んだ段階でサーバから応答が無くなったら場合の良いアイデアないでしょうか?

2004/09/16 15:22:13
id:upride No.4

upride回答回数220ベストアンサー獲得回数12004/09/16 15:14:36

ポイント18pt

★印で、ループで回った「一つ前の読込み処理」の足跡を利用して

タイムアウト判断をすれば宜しいと思います

「足跡の利用例」

一つ前の読込み処理の実行時間と現在時間との差分

一つ前の読込み処理後のバイト数と現在のバイト数の差分

処理ポイントごとにフラグを用意して今どの状態かを把握

うーん。もう3回目は答えられないんですよねぇ

id:kunitz

ありがとうございます!

2004/09/16 15:23:59
  • id:tsekine
    続きを…

    http://d.hatena.ne.jp/tsekine/20040916#p5
    に書きました。
    http://d.hatena.ne.jp/tsekine/20040916#p5

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません