public void Listen(int poolSize) { try { if (!Listened) { workSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); workSocket.Bind(new IPEndPoint(IPAddress.Parse(ip), port)); workSocket.Listen(poolSize); Listened = true; this.BackLog = poolSize; if (acceptThread != null && acceptThread.IsAlive) { acceptThread.Abort(); } acceptThread = new Thread(() => { while (Listened) { accpetDone.Reset(); workSocket.BeginAccept((ar) => { try { if (Listened) { var client = workSocket.EndAccept(ar); var tcpClient = new TcpSocketClient(client); tcpClient.OnRead += onRead; tcpClient.OnSend += onSend; tcpClient.OnDisconnected += onDisconnected; tcpClient.OnException += onException; tcpClient.Start(); //调用委托事件 RequestConnectedEvent(tcpClient); } } catch (Exception e) { RequestExceptionEvent(e); } finally { accpetDone.Set(); } }, null); accpetDone.WaitOne(); } }); acceptThread.IsBackground = true; acceptThread.Start(); //调用委托事件 RequestStartEvent(); } } catch (Exception e) { Listened = false; RequestExceptionEvent(e); } }