私は
このようにStreamWriter
インスタンス化されたものを使用していますTcpstream
streamWriter = new StreamWriter(tcpClient.GetStream());
例外に関して、次の呼び出しの動作について混乱しています。次の2つの関数は、発生することが予想されます。IOException
驚くべきことに、接続IOException
先のサーバーが切断されたtcpClient
ため、基盤となるTCPクライアント接続が切断されたときに発生しません。これらの2つの行は、例外を発生させずに実行されます。なんで ?
streamWriter.WriteLine(strBuffer);
streamWriter.Flush();
編集:この特定の投稿は、専門家からのここでの返信に加えて、理由を理解するのにも役立ちました。 http://social.msdn.microsoft.com/Forums/sk/netfxnetcom/thread/b177a935-7430-4812-9555-f747748df1af 本質的に、StreamWriterのWriteLineが呼び出されると、NetworkStream.Writeが呼び出されます。バッファがいっぱいである場合を除いて、バッファに移動し、ブロックせずに戻ります。OSによって維持されている内部バッファには、未送信のデータが含まれています。このデータは、指定された回数の試行が失敗するまで、OSが送信を試み続けます。WriteLineはIOExceptionをスローしますが、必ずしも毎回ではありません。