gpt4 book ai didi

c# - 为什么 TcpClient.Write 在写入关闭的连接(第一次)时不会抛出异常?

转载 作者:行者123 更新时间:2023-11-30 15:12:25 25 4
gpt4 key购买 nike

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

为了测试它,我将程序运行了一整夜,这样我的程序就会打开连接,长时间不写入任何内容,这样防火墙或远程服务器就会关闭连接。今天早上我查看了 TCPView 并确认连接已关闭,然后告诉我的程序写入套接字。

Write 没有抛出异常。然而,下一个 Write 确实按预期抛出了这个异常:“System.IO.IOException:无法将数据写入传输连接:现有连接被远程主机强行关闭”

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

最佳答案

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

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

关于c# - 为什么 TcpClient.Write 在写入关闭的连接(第一次)时不会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com