// 数据接受回调函数 private void HandleDataReceived(IAsyncResult ar) { if (IsRunning) { TCPClientState state = (TCPClientState)ar.AsyncState; if (state.TcpClient == null || !state.TcpClient.Connected) { return; } NetworkStream stream = state.NetworkStream; int receivedBytes = 0; try { receivedBytes = stream.EndRead(ar); } catch { receivedBytes = 0; } if (receivedBytes == 0) { // connection has been closed lock (this._clients) { this._clients.Remove(state); //触发客户端连接断开事件 RaiseClientDisconnected(state); //Log.OutputLine("连接断开"); state.Close(); return; } } // received byte and trigger event notification byte[] buff = new byte[receivedBytes]; Buffer.BlockCopy(state.Buffer, 0, buff, 0, receivedBytes); //触发数据收到事件 RaiseDataReceived(state, buff); try { if (state.TcpClient.Connected) { // continue listening for tcp datagram packets stream.BeginRead(state.Buffer, 0, state.Buffer.Length, HandleDataReceived, state); } } catch { } } }
/// <summary> /// 关闭一个与客户端之间的会话 /// </summary> /// <param name="state">需要关闭的客户端会话对象</param> public void Close(TCPClientState state) { if (state != null) { state.Close(); lock (this._clients) { this._clients.Remove(state); } //TODO 触发关闭事件 } }