断开插座时,等待时间

时间:2015-07-09 06:15:43

标签: c# sockets visual-studio-2013 asyncsocket

我现在正在用C#学习网络和Windows表单。

我正在尝试构建一个异步套接字网络系统,一切运行良好。

Connect and Connect Callback的代码如下所示。

 private void ClientConnect()
    {
        CheckForIllegalCrossThreadCalls = false;

        try
        {
            socket.BeginConnect(endPoint, new AsyncCallback(ConnectCallback), socket);

            connectDone.WaitOne();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

    private void ConnectCallback(IAsyncResult ar)
    {
        try
        {
            Socket client = (Socket)ar.AsyncState;
            client.EndConnect(ar);

            Send(socket, textBox3.Text, 0);

            connectDone.Set();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

但在断开插座时,存在问题。

我按下了一个按钮来断开套接字,按钮点击事件的代码在下面。

private void btnDisconnect_Click(object sender, EventArgs e)
    {
        try
        {
            socket.Shutdown(SocketShutdown.Both);
            Application.DoEvents();
            socket.Disconnect(true);    //-> problem occurs.
        }
        catch
        {
            MessageBox.Show("Disconnect Error!");
        }

        if (socket.Connected)
            MessageBox.Show("Disconnect Error!");
        else
            textBox1.AppendText("Disconnected! (" + DateTime.Now.ToString("h:mm:ss tt") + ")\n");
    }

当我断开插座时,会发生2分钟的等待时间。

2分钟后(我用时间戳检查了它),显示“已断开连接”消息。

我可以重新连接这个插座。

我认为这不仅仅是等待睡眠,而是在后台进行处理。

(因为鼠标光标已更改且程序被阻止)

我很想知道为什么会出现这种延迟(?)。

请告诉我。

0 个答案:

没有答案