//调用示例:
 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 ;
 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 .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.IAsyncResult r = (System.IAsyncResult) req.BeginGetResponse(new System.AsyncCallback(ResponseCallback), rs);
 }private void ResponseCallback(IAsyncResult ar)
 { 
 
 RequestState rs = (RequestState) ar.AsyncState;.HttpWebRequest req = rs.Request;
.HttpWebResponse resp = (.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();
 OnDataArrival(new DataArrivalEventArgs("\n",true)); 
 allDone.Set();
 }
 return;
 }} 
//================================
//调用示例
 //再贴一个 Socket 编的
 private void button1_Click(object sender, System.EventArgs e)
 { 
 (new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
 (new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
 (new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
 (new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
 (new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
 (new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
 System.Windows.Forms.MessageBox.Show ("send end") ;}
//很久(去年)以前写的 Socket 级的 Class1.cs
 using System;/// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 public class HttpRequestResponse
 { 
 
 private System.Text.StringBuilder SB = new System.Text.StringBuilder();
 private string sReq;
 private byte[] buffer = new byte[1024];
 private int index = 0;
 private static int Count =0;
 //public delegate SendRequestAndGetResponse
 public HttpRequestResponse()
 { 
 
 //
 // TODO: 在此处添加构造函数逻辑
 //
 }
 public void SendRequestAndGetResponse()
 { 
  string sHost = "triatonweb"; 
 int iPort = 80;
 string sReqItem = "游客";
 sReqItem = "uid=" + System.Web.HttpUtility.UrlEncode(sReqItem,System.Text.Encoding.GetEncoding("GB2312"));
 sReq="userid=" + System.Web.HttpUtility.UrlEncode("游客",System.Text.Encoding.GetEncoding("GB2312"))
 + "&dest_tel=13910081138"
 + "&mytel=13910081138"
 + "&mypwd=asdada";
 string CGI = "dotnet/tree/index.asp";
 sReq = "POST /" + CGI + " HTTP/1.1\n"
 + "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\n"
 + "Accept-Language: zh-cn\n"
 + "Content-Type: application/x-www-form-urlencoded\n"
 + "Accept-Encoding: gzip, deflate\n"
 + "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)\n"
 + "Host: " + sHost + ":" + System.Convert.ToString(iPort) + "\n"
 + "Content-Length: " + System.Convert.ToString(sReqItem.Length) + "\n"
 + "Connection: Keep-Alive\n"
 + "Cache-Control: no-cache\n\n"
 + sReq;.Sockets.Socket Skt = new .Sockets.Socket(.Sockets.AddressFamily.InterNetwork,.Sockets.SocketType.Stream,.Sockets.ProtocolType.Tcp); 
 index = ++Count;
 Skt.BeginConnect(new .IPEndPoint(.Dns.Resolve(sHost).AddressList[0], 80),
 new System.AsyncCallback (this.BeginConnectAsyncCallback),Skt);
 System.Console.WriteLine("Socket[" + index.ToString() + "] 开始连接: {0}",Skt.RemoteEndPoint.ToString());  }
 private void BeginConnectAsyncCallback(System.IAsyncResult IAR) 
 { 
 
 // try 
 // { 
 
 .Sockets.Socket Skt = (.Sockets.Socket) IAR.AsyncState;
 Skt.EndConnect(IAR);System.Console.WriteLine("Socket[" + index.ToString() + "] 已连接到: {0}",Skt.RemoteEndPoint.ToString());
 buffer =System.Text.Encoding.GetEncoding("GB2312").GetBytes(sReq) ;
 Skt.BeginSend(buffer,0,buffer.Length,.Sockets.SocketFlags.None,new System.AsyncCallback (this.BeginSendAsyncCallback) ,Skt);
 System.Console.WriteLine("Socket[" + index.ToString() + "] 开始发送: {1} Bytes 数据,到 IP: {0} ",Skt.RemoteEndPoint.ToString(),buffer.Length.ToString() ); 
 // } 
 // catch (Exception e) 
 // { 
 
 // Console.WriteLine(e.ToString());
 // }
 } 
 private void BeginSendAsyncCallback(System.IAsyncResult IAR) 
 { 
 
 // try 
 // { 
 
 .Sockets.Socket Skt = (.Sockets.Socket) IAR.AsyncState;
 Skt.EndSend(IAR);
 System.Console.WriteLine("Socket[" + index.ToString() + "] 发送完毕"); 
 //byte[] buffer = new byte[1024];
 Skt.BeginReceive(buffer,0,buffer.Length,.Sockets.SocketFlags.None,new System.AsyncCallback(this.BeginRecieveAsyncCallback),Skt);
 System.Console.WriteLine("Socket[" + index.ToString() + "] 开始接收数据,从 IP: {0}",Skt.RemoteEndPoint.ToString());  // } 
 // catch (Exception e) 
 // { 
 
 // Console.WriteLine(e.ToString());
 // }
 } private void BeginRecieveAsyncCallback(System.IAsyncResult IAR) 
 { 
 
 // try 
 // { 
 
 .Sockets.Socket Skt = (.Sockets.Socket) IAR.AsyncState;
 int i =Skt.EndReceive(IAR);if (i>0)
 { 
 
 //buffer.Length = i;
 SB.Append("" + System.Text.Encoding.GetEncoding("GB2312").GetString(buffer,0,i));
 Skt.BeginReceive(buffer,0,buffer.Length,.Sockets.SocketFlags.None,new System.AsyncCallback(this.BeginRecieveAsyncCallback),Skt);
 System.Console.WriteLine("Socket[" + index.ToString() + "] 已接收 {1} 字节数据,从 IP: {0}",Skt.RemoteEndPoint.ToString(),buffer.Length.ToString() ); 
 Console.WriteLine(System.Text.Encoding.GetEncoding("GB2312").GetString(buffer,0,i) );
 }
 else
 { 
 
 Skt.Close();
 Skt = null;
 Console.WriteLine(SB.ToString()); 
 } //Skt.BeginReceive
// } 
 // catch (Exception e) 
 // { 
 
 // Console.WriteLine(e.ToString());
 // }
 }}