private void btnClose_Click(object sender, EventArgs e) { ConnectNum = false; AsyncSocketUserToken[] userTokenArray = null; AsyncSocketSvr.AsyncSocketUserTokenList.CopyList(ref userTokenArray); for (int i = 0; i < userTokenArray.Length; i++) { try { lock (userTokenArray[i]) { AsyncSocketSvr.CloseClientSocket(userTokenArray[i]); } } catch (Exception E) { MessageBox.Show(E.ToString()); } } AsyncSocketSvr.CloseAllClient(); txtLink.AppendText(DateTime.Now.ToString() + " :停止监听" + "\r\n"); btnStart.BackColor = Color.FromArgb(255, 255, 255); maxConnect.Enabled = true; btnStart.Enabled = true; }
public void DaemonThreadStart() { while (m_thread.IsAlive) { AsyncSocketUserToken[] userTokenArray = null; m_asyncSocketServer.AsyncSocketUserTokenList.CopyList(ref userTokenArray); for (int i = 0; i < userTokenArray.Length; i++) { if (!m_thread.IsAlive) { break; } try { if ((DateTime.Now - userTokenArray[i].ActiveDateTime).TotalMilliseconds > m_asyncSocketServer.SocketTimeOutMS) //超时Socket断开 { lock (userTokenArray[i]) { m_asyncSocketServer.CloseClientSocket(userTokenArray[i]); } } } catch { } } for (int i = 0; i < 60; i++) //每分钟检测一次 { if (!m_thread.IsAlive) { break; } Thread.Sleep(1000); } } }