当前位置:编程学习 > C#/ASP.NET >>

C# 刚写的 HttpRequsetResponse 类,异步、事件... 还热乎着呢!

答案://调用示例:
private void button1_Click(object sender, System.EventArgs e)
{
    HttpRequestResponse xx = new HttpRequestResponse();
    xx.DataArrival += new DataArrivalEventHandler(xx_DataArrival);
    xx.SendRequest("http://www.triaton.com.cn/dotnet/tree/index.asp","userid=老","Post");
    xx.SendRequest("http://www.triaton.com.cn/dotnet/tree/index.asp","userid=老","get");
}
private void xx_DataArrival(object sender, DataArrivalEventArgs e)
{
    Console.WriteLine(e.RecievedData);
    Console.WriteLine(e.IsComplete);
}
//========================
//Class1.cs
using System;
using System.Net;
using System.Threading;
using System.Text;
using System.IO;

public class RequestState
{
    const int BUFFER_SIZE = 1024;
    public System.Text.StringBuilder RequestData;
    public byte[] BufferRead;
    public System.Net.HttpWebRequest Request;
    public System.IO.Stream ResponseStream;
    public System.Text.Decoder StreamDecode = System.Text.Encoding.GetEncoding("gb2312").GetDecoder();
    
    public RequestState()
    {
        BufferRead = new byte[BUFFER_SIZE];
        RequestData = new System.Text.StringBuilder("");
        Request = null;
        ResponseStream = null;
    }
}
public delegate void DataArrivalEventHandler(object sender, DataArrivalEventArgs e);
public class DataArrivalEventArgs : System.EventArgs
{
    private string mRecievedData;
    private bool mIsComplete = false;
    public DataArrivalEventArgs(string Data,bool Complete)
    {
        mRecievedData = Data;
        mIsComplete = Complete;
    }
    public string RecievedData
    {
        get
        {
            return mRecievedData;
        }
    }
    public bool IsComplete
    {
        get
        {
            return mIsComplete;
        }
    }
}


class HttpRequestResponse
{
    public static System.Threading.ManualResetEvent allDone = new System.Threading.ManualResetEvent(false);
    const int BUFFER_SIZE = 1024;
    public event DataArrivalEventHandler DataArrival;
    
    protected virtual void OnDataArrival(DataArrivalEventArgs e)
    {
        if (DataArrival != null)
        {
            DataArrival(this, e);
        }
    }
    private System.Text.Encoding mRequestEncoding = System.Text.Encoding.GetEncoding("gb2312");
    public void SendRequest(string RequestURL,string RequestData,string RequestMethod)
    {
        HttpWebRequest req;
        RequestState rs = new RequestState();
        if (RequestData != null)
        {
            int i=0, j;
            Char[] reserved = {'?', '=', '&'};
            while(i<RequestData.Length)
            {
                j=RequestData.IndexOfAny(reserved, i);
                if (j==-1)
                {
                    rs.RequestData.Append(System.Web.HttpUtility.UrlEncode(RequestData.Substring(i, RequestData.Length-i),mRequestEncoding));
                    break;
                }
                rs.RequestData.Append(System.Web.HttpUtility.UrlEncode(RequestData.Substring(i, j-i),mRequestEncoding));
                rs.RequestData.Append(RequestData.Substring(j,1));
                i = j+1;
            }
        }
        if (RequestMethod.ToUpper() == "POST")
        {
            byte[] Buffer = null;
            Buffer = mRequestEncoding.GetBytes(rs.RequestData.ToString());
            req =(HttpWebRequest) WebRequest.Create(RequestURL);
            req.ContentLength = Buffer.Length;
            req.Method = RequestMethod;
            req.ContentType = "application/x-www-form-urlencoded";
            Stream newStream = req.GetRequestStream();
            newStream.Write(Buffer, 0, Buffer.Length);
            newStream.Close();
        }
        else
        {
            req =(HttpWebRequest) WebRequest.Create(RequestURL + "?" + rs.RequestData.ToString());
        }

        rs.Request = req;
        System.IAsyn

上一个:为了表示歉意,再贴一个 Socket 编的!让 CNet 加真酷!
下一个:第二部分,公共属性

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,