private void HandleDataReceived() { if (this._running) { try { NetworkStream ns = this._tcpClient.GetStream(); ns.ReadTimeout = 1000 * 20; DataReadInfo dr = new DataReadInfo(DataReadInfoType.Head, this, ns, BaseSocket.HeadLength, BaseSocket.HeadLength); dr.BeginRead(); } catch (Exception ex) { this._running = false; this.OnError(ex); } } }
static void HandleDataRead(IAsyncResult ar) { DataReadInfo dr = ar.AsyncState as DataReadInfo; if (dr.AcceptSocket._running) { int overs = 0; try { overs = dr.NetworkStream.EndRead(ar); } catch (Exception ex) { dr.AcceptSocket.OnError(ex); return; } if (overs > 0) { dr.ResponseStream.Write(dr.Buffer, 0, overs); dr.OverZoreTimes = 0; } else if (++dr.OverZoreTimes > 10) { return; } dr.Over -= overs; if (dr.Over > 0) { dr.BeginRead(); } else if (dr.Type == DataReadInfoType.Head) { var bodySizeBuffer = dr.ResponseStream.ToArray(); if (int.TryParse(Encoding.UTF8.GetString(bodySizeBuffer, 0, bodySizeBuffer.Length), NumberStyles.HexNumber, null, out overs)) { DataReadInfo drBody = new DataReadInfo(DataReadInfoType.Body, dr.AcceptSocket, dr.NetworkStream, 1024, overs - BaseSocket.HeadLength); drBody.BeginRead(); } } else { dr.AcceptSocket.OnDataAvailable(dr); } } }