/// <summary> /// 接收线程 /// </summary> /// <param name="ar">回调参数</param> private void ReceiveEnd(IAsyncResult ar) { var state = ar.AsyncState as StateObject; if (state == null) { return; } try { state.ByteCount = state.WorkSocket.EndReceive(ar); } catch { state.ByteCount = 0; state.Buffer = new byte[0]; } if (state.WorkSocket.Connected && state.ByteCount > 0) { state.WorkSocket.BeginReceive(state.Buffer, 0, state.BufferSize, 0, new AsyncCallback(ReceiveEnd), state); } else // 客户端关闭 { // 添加到客户端列表 var ep = state.WorkSocket.RemoteEndPoint as IPEndPoint; LstClient.Remove(ep); } // 执行传入的委托 if (_actReceive != null) { _actReceive(state); } }
/// <summary> /// 停止服务 /// </summary> public void Stop() { if (_socket != null) { if (_socket.Connected) { _socket.Shutdown(SocketShutdown.Both); } _socket.Close(); _socket.Dispose(); _socket = null; } foreach (var item in LstClient) { item.Value.Close(); item.Value.Dispose(); } LstClient.Clear(); }