サーバー/クライアント アプリがあります。
どちらも通信時に BinaryReader/Writer を使用します。
クライアントとサーバーがメッセージを迅速に交換している場合、特定の秒に多くのメッセージが送信され、ほとんどの場合 (常にではありませんが) サーバーをシャットダウンします (組み込みコマンドを使用して、正常なシャットダウンを行います)。クライアントの BinaryReader.ReadString() メソッドは、 EndOfStreamException、これで問題ありません。私が理解できないのは、この例外が TcpClient.Connected プロパティを「false」に変更しないのはなぜですか?
while(true){
try{
BinaryReader.ReadString()
}
catch(IOException){
if(!TcpClient.Connected)
break;
//BinaryWriter.Write() - this will, eventually, change Connected property to 'false'
}
}
これは無限にループします。ネットワークの読み取り/書き込みが失敗すると、Connected プロパティが変更されると思いました。BinaryReader が例外をスローしている場合、正常に読み取られていませんか?
BinaryWriter.Write() をスローすると、Connected プロパティが「false」に変更されるため、無限ループが壊れます。
関連する質問ですが、EndOfStreamException は常にネットワーク接続の切断を示していますか、それとも一時的な問題を意味している可能性がありますか?