3

TcpClient と SslStream を使用してソケットにデータを書き込む簡単なプログラムがあります。

テストするために、プログラムを一晩実行して、プログラムが接続を開き、長時間何も書き込まないようにしたため、ファイアウォールまたはリモートサーバーが接続を閉じました。今朝、私は TCPView を見て、接続が閉じられていることを確認し、プログラムにソケットに書き込むように指示しました。

書き込み時に例外はスローされませんでした。ただし、次の書き込みでは、予想どおりこの例外がスローされました。「System.IO.IOException: トランスポート接続にデータを書き込むことができません: 既存の接続がリモート ホストによって強制的に閉じられました」</p>

実際に接続されていない場合でも TcpClient.Connected が True を返す理由はわかりますが、(TCPView で確認されたように) 実際に閉じられた接続で Write が例外をスローしないのはなぜですか?

4

1 に答える 1

5

これは、TCP/IP プロトコルの仕組みによるものです。TcpClient.Write を呼び出すと、データがサーバーに送信され、関数はサーバーの応答を待たずに成功を返します。

その間、サーバーはエラーを返します。あなたの側の TCP/IP スタックは、次に書き込もうとすると例外がスローされることに気付きます

于 2009-08-19T16:11:55.707 に答える