我的服务器应用程序运行良好,直到我尝试关闭它。那时我得到两个例外。我把一个try-catch试图对它们进行调试,并转到以下内容:服务器异常关闭(阻止操作中断)
第一个例外:A blocking operation was interrupted by a call to WSACancelBlockingCall
:第二个是Not listening. You must call the Start() method before calling this method.
下面是在异常发生的一个片段:
private void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
try
{
TcpClient client = this.tcpListener.AcceptTcpClient(); // EXCEPTION OCCURS HERE
string clientIPAddress = "" + IPAddress.Parse(((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString());
ClientIPLabel.Text = clientIPAddress;
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
catch (Exception e)
{
MessageBox.Show(e.Message.ToString());
}
}
}
我不知道这是否可能是因为我在这里还是不缺少的东西,但这里是我的代码用于关闭服务器应用程序:
private void ShutdownServer_Click(object sender, EventArgs e)
{
this.tcpListener.Stop();
Application.Exit();
}
我也无法从发布版本运行这个应用程序;只要我尝试运行它就会冻结,并且我需要重新启动我的机器才能关闭它(我可以关闭表单,但进程保持在任务管理器中运行,“结束任务”不会关闭它) 。我假设这些异常可能是导致该问题的原因,因为我可以很好地运行调试版本。
这个问题似乎是在tcplistener,因为如果我注释掉'this.tcpListener.Stop();'在我的关机方法,我不得到任何异常,但即使我的GUI关闭,这个过程仍然在后台运行,直到我关闭任务管理器 – Patrick