我有一个简单的程序,使用TcpClient和SslStream将数据写入套接字.
为了测试它,我将程序运行了一整夜,以便我的程序可以打开连接,长时间不写任何内容,因此防火墙或远程服务器将关闭连接.今天早上,我看了看TCPView并确认连接已关闭,然后告诉我的程序向套接字写入.
Write不会引发任何异常.但是,下一次Write确实按预期引发了该异常:“ System.IO.IOException:无法将数据写入传输连接:现有连接被远程主机强行关闭”
我可以看到为什么TcpClient.Connected即使没有真正连接也可以返回True,但是为什么Write不会在实际上已关闭的连接上抛出异常(在TCPView中已验证)?
解决方法:
这是因为TCP / IP协议的工作方式.
当您调用TcpClient.Write数据被发送到服务器时,该函数将返回成功而无需等待服务器响应.
同时,服务器返回错误.
您身边的Tcp / IP堆栈会注意到,下次尝试写入时,它将引发异常