playyuer㊣www.Microshaoft.com I Love UltraEditPlus

砍头不要紧 爱情价更高 欲穷千里目 粒粒皆辛苦 身披七彩祥云 脚踏金甲圣衣 卧鼠藏虫

用户操作
[即时聊天] [发私信] [加为好友]
playyuer㊣Microshaoft.comID:playyuer
139645次访问,排名642,好友0人,关注者1人。
playyuer的文章
原创 74 篇
翻译 0 篇
转载 1 篇
评论 85 篇
最近评论
大实话:这篇鸟文, 一个注释都没有, 会的不必看, 不会的没法看, 如何称为好文?
公子哥:SB一个,人家说你为什么要跟java相结合?
你的文章介绍里实际就这么个本质!
炫耀你懂的多啊?写.NET的有几个看不懂JAVA的?
似乎没什么值得炫耀的...
你NB的去看看ASM,去看看FREEBSD内核..
C++你写个Splist的算法来看看?
ahking:如果是写入cookie该怎么做呢?
蛙蛙:不错
晕:为了获取字符编码而如此麻烦就太那个了,就说明这绝对是.net类库的不足,为什么他的记事本能轻易的辨认呢,就说明绝对是有现成的方法的,只是他没给弄进去。
文章分类
收藏
    相册
    EditPlus
    Files
    images
    dev
    dev.csdn.net
    dev.playyuer.csdn.net
    IBM DW 网站时事
    msdn
    MSDN WebCasts
    MSDN 讲座
    Ms开发者讲座
    Reflector
    regexlib
    rss大全
    UML软件工程组织
    孟子
    系统分析 之窗
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 C# 写的 HttpRequsetResponse 类,异步、事件... 还热乎着呢!收藏

    新一篇: 在不破坏原加密存储过程的前提下,解密存储过程!(补充j9988) | 旧一篇: TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件

    //调用示例:
    /*
    2003-7-1
    1.支持Proxy
    2.可指定同步或异步
    3.一些小修改
    */

    private void button1_Click(object sender, System.EventArgs e)
    ?{
    ??HttpRequestResponse xx = new HttpRequestResponse();
    ??xx.DataArrival += new DataArrivalEventHandler(xx_DataArrival);
    ??//xx.SendRequest(@"http://localhost:2080/examples/myservlets/servlet2","message=QQ&desttel=13910911925&mytel=13910081138&mypwd=263996211");
    ??xx.SendRequest(@"http://localhost","message=你好QQ&desttel=13910911925&mytel=13910081138&mypwd=263996211","GET",true);
    ??xx.SendRequest("http://localhost/quickstart/util/srcview.aspx?path=/quickstart/howto/samples/net/WebRequests/clientGETasync.src","post",false);
    ?}
    private int i=0;
    private void xx_DataArrival(object sender, DataArrivalEventArgs e)
    ?{
    ??Console.WriteLine( i++);
    ??Console.Write(e.RecievedData? );
    ??if (e.IsComplete)
    ???{
    ???Console.Write("[" + ((HttpRequestResponse) sender).Request.CookieContainer.GetCookieHeader(((HttpRequestResponse) sender).Response.ResponseUri).ToString() + "]");
    ???}
    ??}

    //========================
    //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");
    ?private bool mUseProxy = false;
    ?public bool UseProxy
    ?{
    ??get
    ??{
    ???return mUseProxy;
    ??}
    ??set
    ??{
    ???mUseProxy = value;
    ??}
    ?}

    ?private System.Net.WebProxy mWP = System.Net.WebProxy.GetDefaultProxy();
    ?public System.Net.WebProxy Proxy
    ?{
    ??get
    ??{
    ???return mWP;
    ??}
    ??set
    ??{
    ???mWP = value;
    ??}
    ?}

    ?private System.Net.HttpWebRequest mHWReq = null;
    ?public System.Net.HttpWebRequest Request
    ?{
    ??get
    ??{
    ???return mHWReq;
    ??}
    ?}
    ?
    ?private System.Net.HttpWebResponse mHWRsp = null;
    ?public System.Net.HttpWebResponse Response
    ?{
    ??get
    ??{
    ???return mHWRsp;
    ??}
    ?}
    ?public void SendRequest(string RequestURL,string RequestData,bool Async)
    ?{
    ??SendRequest(RequestURL,RequestData,"GET",Async);
    ?}
    ?public void SendRequest(string RequestURL,string RequestData,string RequestMethod,bool Async)
    ?{
    ??HttpWebRequest req;
    ??RequestState rs = new RequestState();
    ??if (RequestData != null)
    ??{
    ???int i=0, j;
    ???Char[] reserved = {'?', '=', '&'};
    ???while(i???{
    ????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());
    ??}
    ??req.Credentials = CredentialCache.DefaultCredentials;
    ??req.UserAgent = "playyuer@Microshaoft.com";
    ??req.KeepAlive = true;
    ??req.Headers.Set("Pragma", "no-cache");
    ??req.Timeout = 300000;
    ??if (mUseProxy)
    ??{
    ???if (mWP == null)
    ????mWP = System.Net.WebProxy.GetDefaultProxy();
    ???GlobalProxySelection.Select = mWP;
    ??}
    ??rs.Request = req;
    ??mHWReq = req;
    ??
    ??System.IAsyncResult r = (System.IAsyncResult) req.BeginGetResponse(new System.AsyncCallback(ResponseCallback), rs);
    ??if (!Async)
    ???allDone.WaitOne();
    ?}

    ?private void ResponseCallback(IAsyncResult ar)
    ?{
    ??RequestState rs = (RequestState) ar.AsyncState;
    ??System.Net.HttpWebRequest req = rs.Request;
    ??System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse) req.EndGetResponse(ar);
    ??System.IO.Stream ResponseStream = resp.GetResponseStream();
    ??rs.ResponseStream = ResponseStream;
    ??IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);
    ?}

    ?private void ReadCallBack(IAsyncResult asyncResult)
    ?{
    ??RequestState rs = (RequestState)asyncResult.AsyncState;
    ??System.IO.Stream responseStream = rs.ResponseStream;
    ??int read = responseStream.EndRead( asyncResult );
    ??if (read > 0)
    ??{
    ???Char[] charBuffer = new Char[BUFFER_SIZE];
    ???int len = rs.StreamDecode.GetChars( rs.BufferRead, 0, read, charBuffer, 0 );
    ???System.String str = new System.String( charBuffer, 0, len);
    ???OnDataArrival(new DataArrivalEventArgs(str,false));
    ???rs.RequestData.Append(str);
    ???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();
    ???}
    ???responseStream.Close();
    ???allDone.Set();
    ???OnDataArrival(new DataArrivalEventArgs("\n",true));
    ??}
    ??return;
    ?}
    }


    发表于 @ 2003年07月03日 13:31:00|评论(loading...)|编辑

    新一篇: 在不破坏原加密存储过程的前提下,解密存储过程!(补充j9988) | 旧一篇: TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件

    评论

    #playyuer 发表于2004-08-12 22:01:00  IP:
    TrackBack来自《复习一下 .Net: delegate(委托)、event(事件) 的基础知识,从头到尾实现事件!》

    Ping Back来自:blog.csdn.net
    #yolle 发表于2004-11-09 16:17:00  IP:
    TrackBack来自《复习一下 .Net: delegate(委托)、event(事件) 的基础知识,从头到尾实现事件! 》

    Ping Back来自:blog.csdn.net
    #bestcomy 发表于2004-08-11 09:37:00  IP: 221.216.245.*
    好文如何无人回复?
    另外代码前面的空格全部变成了?号
    #lion 发表于2004-08-11 17:59:00  IP: 218.247.132.*
    问号可能和blog。csdn的编码有关吧?
    #大实话 发表于2006-12-01 16:30:00  IP: 222.95.142.*
    这篇鸟文, 一个注释都没有, 会的不必看, 不会的没法看, 如何称为好文?
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © playyuer㊣Microshaoft.com