关闭时服务器异常(阻塞操作中断)

时间:2015-12-28 22:53:43

标签: c# exception tcp listener blocking

我的服务器应用程序运行完全正常,直到我尝试关闭它。那时我有两个例外。我在try-catch中尝试调试它们,然后执行以下操作:

第一个例外是: 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(); }

以下是发生异常的片段:

{{1}}

我不确定是否可能是因为我在这里遗漏了一些东西,但这是关闭服务器应用程序的代码:

{{1}}

我也无法从发布版本中运行此应用程序;它只是在我尝试运行时冻结,我需要重新启动我的机器才能关闭它(我可以关闭表单,但是进程在任务管理器中保持运行并且“结束任务”不会关闭它) 。我假设这些异常可能是导致该问题的原因,因为我可以运行调试版本。

1 个答案:

答案 0 :(得分:1)

异常是正常的。之所以会发生这种情况,是因为您正在同时关闭当时正在接受的侦听器。

捕获该异常并将其丢弃是正确的选择。我会这样做,以使捕获更安全:

{{1}}

没有更清洁(无异常)的方式来中断套接字操作。 (是的,这是一个糟糕的情况。)

关于冻结问题,这不正常,也不是.NET问题(.NET无法阻止进程被杀死,没有这样的Windows API)。 Windows错误,操作系统损坏,防病毒,防火墙,......

相关问题