我现在正在用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分钟后(我用时间戳检查了它),显示“已断开连接”消息。
我可以重新连接这个插座。
我认为这不仅仅是等待睡眠,而是在后台进行处理。
(因为鼠标光标已更改且程序被阻止)
我很想知道为什么会出现这种延迟(?)。
请告诉我。