コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
                }
            }
        }