私のコードでは本当に奇妙な状況が起こっています。私はac#チャットクライアントサーバーアプリケーションを開発しています。サーバーを閉じるときに、クライアントを自動的に閉じます。クライアントは、StremReaderを使用してTcpClientオブジェクトから読み取っています。クライアントはwhileループにあり、行(StreamReader.ReadLine())を読み取り、読み取った行を使用していくつかの操作を実行します。サーバーが閉じられると、サーバー側のtcp接続も閉じます。だから、私はクライアントがreadlineによって引き起こされたSocketExceptionを見て、それをキャッチして終了することを期待しています。しかし、例外は捕らえられません!クライアントループコードは次のとおりです。
while (true)
{
try
{
ricev = read.ReadLine();
}
catch(SocketException exc)
{
//It never gets in here
}
chat.Invoke(showMessage, ricev);
}
サーバーを閉じると、Visual Studioから「System.Net.Sockets.SocketException」のファーストチャンス例外がSystem.dllで発生したと表示されますが、キャッチできません。なぜそれが起こるのですか?私はまた、一般的な例外をキャッチしようとしました
catch
{
}
ブロックしますが、それも機能しません。
どんな助けでもありがたいです!
編集:何度か試した後、SocketExceptionがまったく発生しないことが実際にわかりました。コメントで述べたように、これは非常に奇妙なことです。逆の状況では、クライアントがサーバーの前に閉じられると、例外が発生し、それをキャンセルできます。何が起こっているのかよくわかりません。