套接字.关机和线程
本文关键字:线程 关机 套接字 | 更新日期: 2023-09-27 18:10:57
我对套接字编程很陌生。我们的应用程序使用套接字与我们公司生产的设备进行通信。我们有一个问题,套接字有时需要很长时间才能关闭。
下面是关闭套接字时运行的代码:
if (client != null) {
try {
if (client.Connected) {
client.Disconnect(false);
client.Shutdown(SocketShutdown.Both);
}
client.Close();
} catch (SocketException) {
}
client = null;
}
我已经阅读了Socket.Shutdown
方法的文档和对这个问题的回答,我很困惑。正在从远程系统传输到本系统(反之亦然)的任何数据将被传输或放弃吗?如果放弃了正在传输的数据,是什么延迟了套接字的关闭?
在关闭之前调用Shutdown
,这样您就可以确保所有排队的数据都被实际接收。
不呼叫Disconnect
。为什么这是必要的?没有理由。在关闭之前,这是特别错误的。想想这是否有意义。
在Shutdown
之后调用Dispose
或Close
释放所有操作系统资源。该连接现在已可靠地关闭。
不要吞下SocketException
。你为什么要这么做?你将永远不会发现你发送的数据没有被接收。
我们有一个问题,套接字有时需要很长时间才能关闭。
你怎么知道?它的症状是什么?