【发布时间】:2015-12-28 22:53:43
【问题描述】:
我的服务器应用程序运行良好,直到我尝试关闭它。那时我有两个例外。我放入了一个 try-catch 来尝试调试它们,然后执行以下操作:
第一个例外是:A blocking operation was interrupted by a call to WSACancelBlockingCall,第二个例外是Not listening. You must call the Start() method before calling this method.
这是发生异常的 sn-p:
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关闭,进程仍在运行在后台,直到我用任务管理器关闭它
标签: c# exception tcp listener blocking