假设您有 2 个应用程序,服务器和客户端。我在 Visual Studio 2010 的 2 个实例中同时调试它们。假设在客户端我调用:
_reader.Close(); //BinaryReader
_writer.Close(); //BinaryWriter
_ssl.Close(); //SslStream taken from _stream
_stream.Close(); //NetworkStream from _client.GetStream();
_client.Close(); //TcpClient
我已经通过调试器检查了该代码是否已执行。在此之后,我还通过其他指令触发客户端应用程序的关闭,事实上 Visual Studio 退出调试模式并返回标准模式。
在服务器应用程序中,由于连接实际上已关闭,挂起的 _reader.Read() 失败,触发异常,该异常在 try/catch 中正确处理。这一点,根据TcpClient.Connected Remarks应该相应地更新 TcpClient.Connected 的值。
这不会发生:服务器中的另一个线程不断检查 _client.Connected 但它仍然是正确的。
你应该注意:
1)如果我使用“停止”按钮关闭客户端,一切正常,_client.Connected 变为 false
2)不知道这是否相关,但服务器侦听 127.0.0.1 并且客户端连接到 127.0.0.1,因为我在单台电脑上调试这两个应用程序