1

サーバーに接続し、サーバーからのランダムなタイミングの入力をリッスンし続けるデモアプリを作成しようとしています。の検出とサーバーへの接続は正常に機能するので、新しいスレッドを開始するので、UI をブロックしません。さて、私のスレッドでは、着信データがあるかどうかを継続的にリッスンして対応する必要があります。私がこれまでに読んだことによると、次のように行う必要があります。

  while (connected) {
      while ((line = bufferedReader.readLine()) != null) {
          // do something with line and contact the ui
      }
  }

私が理解していないこと: readLine() は明らかに、サーバーからの受信データがある場合にのみ行を読み取ることができます。では、サーバーが送信を停止すると、つまり何も送信されない場合、ループは中断されるべきではありませんか?

考えてくれてありがとう、マーカス

4

1 に答える 1

1

readLine はブロッキング メソッドであるため、何も受信されていない場合は、そこで実行をブロックして待機します。ループは、null 値が受信された場合にのみ停止します (テキスト ファイルを読み取る場合、これは通常、ファイルの終わりに達したことを意味します)。

クローズされた接続を別の方法で検出するか、サーバーもコーディングしている場合は、クライアントで読み取ることができる "END" などを送信してみてください。

于 2012-07-06T09:44:00.317 に答える