【发布时间】:2016-05-15 17:23:57
【问题描述】:
对于这四种方法实际上的作用,对于网络编程新手来说,很难找到一个简单的解释。人们通常只是陈述他们认为在特定场景中关闭套接字的正确方法,而不是在每个步骤背后发生的情况。
按照“授人以渔”的理念,您能解释一下Shutdown、Disconnect、Close 和Dispose 方法吗?
【问题讨论】:
-
我发现如果你在等待数据仍然出去,调用Shutdown是不够的。在调用 Disconnect 或 Close 之前,您可能需要手动休眠一小段时间(直到我找到更好的方法)。
-
你看我的回答了吗?如果我在那儿(可能不在),Shutdown 将不会等待发送数据。此外,不带参数调用 Close(或 Dispose,这是同一件事)将突然停止发送数据。断开连接应该阻塞,直到发送完所有剩余数据。或者,超时关闭也将等到给定时间,然后突然停止传输。
-
我确实阅读了您的答案,但在我的情况下不起作用。我想知道网卡驱动程序是否与行为有关。即使使用 linger set,有时数据也不会发送。我认为 Windows 堆栈有一些关闭错误,几乎没有 Microsoft 的过时文档。
标签: c# .net sockets network-programming winsock