Ejemplo n.º 1
0
        public void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                // Retrieve the state object and the client socket
                // from the async state object.
                DataStateObject state = (DataStateObject)ar.AsyncState;
                Socket          sock  = state.workSocket;

                // Read data from the remote device.
                int bytesRead = sock.EndReceive(ar);
                state.BytesTransfered += bytesRead;

                if (bytesRead > 0)
                {
                    // There might be more data, so store the data received so far.
                    string s = Encoding.ASCII.GetString(state.buffer, 0, bytesRead);
                    state.sb.Append(s);

                    if (state.sb.ToString().EndsWith(CRLF))
                    {
                        m_endTick  = Environment.TickCount;
                        m_response = state.sb.ToString();
                        m_ftpmonitor.TransferCompleted(state.BytesTransfered, m_endTick - m_startTick);
                    }
                    else
                    {
                        //  Get the rest of the data.
                        sock.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                                          new AsyncCallback(ReceiveCallback), state);
                    }
                }
                else
                {
                    m_endTick = Environment.TickCount;
                    m_ftpmonitor.TransferCompleted(state.BytesTransfered, m_endTick - m_startTick);
                }
            }
            catch (Exception e)
            {
                m_lasterror = e.Message;
                ErrorNotify("DataAsyncSocket.ReceiveCallback");
            }
        }