3

我有一个简单的程序,它使用 TcpClient 和 SslStream 将数据写入套接字。

为了测试它,我在晚上运行程序,这样我的程序会打开连接,很长一段时间什么都不写,所以防火墙或远程服务器会关闭连接。今天早上我查看了 TCPView 并确认连接已关闭,然后告诉我的程序写入套接字。

写入时未引发异常。但是,接下来的 Write 确实如预期抛出了这个异常:“System.IO.IOException: Unable to write data to the transport connection: An existing connection was forced closed by the remote host”</p>

我可以看到为什么即使 TcpClient.Connected 确实没有连接也可以返回 True,但是为什么 Write 不会在实际关闭的连接上抛出异常(如 TCPView 中所验证)?

4

1 回答 1

5

这是因为 TCP/IP 协议的工作方式。当您调用 TcpClient.Write 时,数据正在发送到服务器,并且该函数无需等待服务器响应即可返回成功。

与此同时,服务器返回一个错误。您身边的 Tcp/IP 堆栈注意到,下次您尝试编写它时会抛出异常

于 2009-08-19T16:11:55.707 回答