套接字.关机和线程

本文关键字:线程 关机 套接字 | 更新日期: 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之后调用DisposeClose释放所有操作系统资源。该连接现在已可靠地关闭。

不要吞下SocketException。你为什么要这么做?你将永远不会发现你发送的数据没有被接收。

我们有一个问题,套接字有时需要很长时间才能关闭。

你怎么知道?它的症状是什么?