Androidフォンからタブレットにデータを送信するクライアントサーバーアプリがあります-電話、SMS、バッテリー状態などさらに、クライアントには PhoneStateListener と、通話やバッテリーの状態などを追跡する BroadcastReceiver があります。
要点は、両端が生きているということですが、ある段階で (私のロギング設定によると約 20 分)、クライアントは「壊れたパイプ」があると報告します。
サーバー側では、スレッド内でクライアントからのシングルバイトコマンドをリッスンするループ内のサーバーをブロックしていますが、問題の原因を見つけるために毎分実行されるスレッドも追加しました。
クライアントが破損したパイプを検出すると、サーバーソケットが原因であるという状態があると想定していますが、次のことをテストしています-
- Socket が開いているかどうか。
- 入力ストリームまたは出力ストリームが開いているかどうかに関係なく、
- それらのいずれかが null かどうか。
残念ながら、これらの条件はすべて問題なく、
接続がまだアクティブであるように見えます。何を探すべきですか?
私ができるようにしたいのは、クライアントが「壊れたパイプ」を検出すると、サーバーも検出し、再接続を試みることです。