try
{
//监听线程退出
if (threadListener != null)
{
evtExit.Set();
threadListener.Join();
}
//所有连接端口
clientPool.Clear();
//关闭监听
if (socketListener != null)
{
**//通过日志看到程序卡在这里**
socketListener.Stop();
socketListener.Server.Dispose();
}
TaskbarNotifier.CloseMessage();
}
catch (SocketException ex)
{
WriteLog(ex.ToString());
}
是不是server已经提前关闭了?如果在socketListener != null判断时TCP链接还在,而接下来服务端已经终止了,监听端口会有类似尝试连接的动作,这个动作在超时之前的现象类似于卡死。和数据库连接类似
难道是windows server? 你关闭窗口不会是关闭服务器的运行窗口吧
windows不清楚 但linux除非你Kill -9 否则是会等待所以代码执行完毕的
windows关闭窗口估计是直接杀死进程, 类似于Kill -9 这种情况下是无法保证线程关闭顺序的
如果子线程先关闭,那么你这个主线程再去close是会挂掉
建议不要关闭窗口来杀死程序,而是写一个closeServer的接口,按照自己想要的顺序去关闭服务器