TCPソケットを介して接続するサーバーと複数のクライアントがあります。サーバーは、一意のデバイスIDを使用して最初に自分自身を登録する接続クライアントをリッスンします。デバイスが最初に登録されると、サーバーはクライアントに小さなメッセージを「生成」します。これにより、クライアントがウェイクアップして別のソースからデータをダウンロードします。
私たちが抱えている問題は、ネットワークがGPRSを介しており、カバレッジの悪いエリアではネットワークがダウンしたり、サービスの品質が低下したりすることがよくあることです。発生しているように見えるのは、クライアント内で、ネットワーク層がドロップした場合でもNetworkStream.Read()呼び出しがブロックされていることです。例外はスローされず、ネットワークが戻っても、呼び出しはデータを検出しないようです。
これには何か理由がありますか?この問題を回避するにはどうすればよいですか?
NetworkStreamは少なくとも例外をスローして、クライアントが接続の再試行段階に入ることができると思っていたでしょう。