예제 #1
0
 protected void OnReciveMessage(HttpWebEventArgs e)
 {
     if (ReciveMessage != null)
     {
         ReciveMessage(this, e);
     }
 }
예제 #2
0
        /// <summary>
        /// 读取数据回调函数.
        /// </summary>
        /// <param name="asyncResult"></param>
        public void ReadCallBack(IAsyncResult asyncResult)
        {
            // 从 asyncresult 获取 RequestState 对象
            RequestState rs = (RequestState)asyncResult.AsyncState;

            // 取出在 RespCallback 中设置的 ResponseStream
            Stream responseStream = rs.ResponseStream;

            // 此时 rs.BufferRead 中应该有一些数据。
            // 读取操作将告诉我们那里是否有数据
            int read = responseStream.EndRead(asyncResult);

            if (read > 0)
            {
                // 准备 Char 数组缓冲区,用于向 Unicode 转换
                Char[] charBuffer = new Char[BUFFER_SIZE];

                // 将字节流转换为 Char 数组,然后转换为字符串
                // len 显示多少字符被转换为 Unicode
                int    len = rs.StreamDecoder.GetChars(rs.BufferRead, 0, read, charBuffer, 0);
                String str = new String(charBuffer, 0, len);

                // 将最近读取的数据追加到 RequestData stringbuilder 对象中,
                // 该对象包含在 RequestState 中
                rs.RequestData.Append(str);


                // 现在发出另一个异步调用,读取更多的数据
                // 请注意,将不断调用此过程,直到
                // responseStream.EndRead 返回 -1
                IAsyncResult ar = responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);
            }
            else
            {
                if (rs.RequestData.Length > 1)
                {
                    // 所有数据都已被读取,因此将其显示到控制台
                    string strContent;
                    strContent = rs.RequestData.ToString();
                    HttpWebEventArgs e = new HttpWebEventArgs(strContent);
                    OnReciveMessage(e);
                }

                // 关闭响应流
                responseStream.Close();
            }
            return;
        }