//调用示例:
/*
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<requestdata.length>???{<br>????j=RequestData.IndexOfAny(reserved, i);<br>????if (j==-1)<br>????{<br>?????rs.RequestData.Append(System.Web.HttpUtility.UrlEncode(RequestData.Substring(i, RequestData.Length-i),mRequestEncoding));<br>?????break;<br>????}<br>????rs.RequestData.Append(System.Web.HttpUtility.UrlEncode(RequestData.Substring(i, j-i),mRequestEncoding));<br>????rs.RequestData.Append(RequestData.Substring(j,1));<br>????i = j+1;<br>???}<br>??}<br>??if (RequestMethod.ToUpper() == "POST")<br>??{<br>???byte[] Buffer = null;<br>???Buffer = mRequestEncoding.GetBytes(rs.RequestData.ToString());<br>???req =(HttpWebRequest) WebRequest.Create(RequestURL);<br>???req.ContentLength = Buffer.Length;<br>???req.Method = RequestMethod;<br>???req.ContentType = "application/x-www-form-urlencoded";<br>???Stream newStream = req.GetRequestStream();<br>???newStream.Write(Buffer, 0, Buffer.Length);<br>???newStream.Close();<br>??}<br>??else<br>??{<br>???req =(HttpWebRequest) WebRequest.Create(RequestURL + "?" + rs.RequestData.ToString());<br>??}<br>??req.Credentials = CredentialCache.DefaultCredentials;<br>??req.UserAgent = "<a href="mailto:playyuer@Microshaoft.com">playyuer@Microshaoft.com</a>";<br>??req.KeepAlive = true;<br>??req.Headers.Set("Pragma", "no-cache");<br>??req.Timeout = 300000;<br>??if (mUseProxy)<br>??{<br>???if (mWP == null)<br>????mWP = System.Net.WebProxy.GetDefaultProxy();<br>???GlobalProxySelection.Select = mWP;<br>??}<br>??rs.Request = req;<br>??mHWReq = req;<br>??<br>??System.IAsyncResult r = (System.IAsyncResult) req.BeginGetResponse(new System.AsyncCallback(ResponseCallback), rs);<br>??if (!Async)<br>???allDone.WaitOne();<br>?}</requestdata.length>
?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;
?}
}
分享到:
相关推荐
总结,"c# 串口类 纯异步接收"涉及到的是使用C#的`SerialPort`类进行非阻塞串口数据接收的技术,通过事件驱动的方式实现高效且不会影响主线程运行的串口通信。理解并熟练掌握这一技术,对于开发涉及串行通信的C#应用...
标题中的"Scoket异步高并发"指的是在C#中利用Socket类的异步操作特性来处理大量并发连接。在传统的同步Socket编程中,服务器端每接收一个连接请求就需要分配一个线程进行处理,当并发连接数量过大时,系统可能会因为...
本教程主要探讨如何使用C#的Socket实现异步通信,并结合事件和委托来处理通信过程中的消息传递,以及如何将通信逻辑与用户界面(UI)分离,以实现更高效、更灵活的程序设计。 首先,让我们理解什么是Socket异步通信。...
在C#编程中,异步操作是现代应用开发的关键特性,尤其在处理大量数据或进行I/O密集型任务时,如查询数据库。本主题将深入探讨C#中的异步概念,如何异步查询数据库,以及如何异步处理一行一行加载的数据。 首先,...
本篇文章将详细探讨C#中实现Socket异步通信的封装库源码,主要涵盖`SocketListener`、`SocketClient`和`TcpService`的封装,以及异步实现的相关类定义。 首先,`SocketListener`是服务器端的核心组件,用于监听特定...
1. 网上注册写的不规范.应该是下载后在64位系统下粘贴到该目录, C:\Windows\SysWOW64 下,然后在该目录找到 cmd.exe ,右键管理员身份打开,输入 regsvr32 opcdaauto.dll 即可. 2. 在vs里右键添加引用. 3. .net程序中...
在C#编程中,异步连接SQL Server数据库是提高应用程序性能和用户体验的关键技术。这是因为异步操作允许程序在等待数据库响应时执行其他任务,而不是阻塞主线程,从而避免了UI冻结或整体性能下降。本篇文章将深入探讨...
Socket异步传输是C#中实现高性能网络编程的关键特性,它允许程序在不阻塞主线程的情况下处理网络事件。这种非阻塞模式对于构建能够同时处理多个连接的服务器至关重要,因为它可以提高系统的并发性和响应性。 1. **...
在C#中,我们可以利用`System.IO.File`类和`System.Threading.Tasks.Task`来实现异步文件复制。以下是一个简单的示例: ```csharp using System.IO; using System.Threading.Tasks; public async Task ...
C# 是一种广泛使用的.NET编程语言,它提供了丰富的异步支持。本教程将详细解释`WebClient.DownloadFileAsync`方法,这是一个异步下载文件的功能,适用于C#开发者,特别是初学者。我们将探讨异步编程的基本概念,`...
本主题将深入探讨如何使用C#实现Asp.NET中的邮件异步发送,包括同步和异步两种方法,以及使用SMTP(Simple Mail Transfer Protocol)模式进行实际的邮件传输。 首先,我们需要了解SMTP。SMTP是一种Internet标准,...
在C#中,我们可以使用`System.Net.Sockets`命名空间中的`UdpClient`类来操作UDP套接字。 **异步发送** 异步发送允许程序在等待数据发送完成时继续执行其他任务,提高了程序的并发性。在C#中,`UdpClient`提供了两个...
总结起来,C#实现异步调用外部程序的关键在于理解和运用`async/await`、`Process`类以及异步等待的策略。通过这种方式,我们可以在不阻塞主线程的情况下执行外部程序,并获取其输出,从而提高应用程序的性能和用户...
本主题聚焦于C#中的“基于事件的异步模式”(Event-based Asynchronous Pattern, EAP),这是一种为用户界面(UI)应用程序设计的异步编程模型。下面我们将深入探讨这一模式以及与之相关的多线程、委托和源码实现。 ...
在.NET编程环境中,C#语言提供了丰富的库支持网络通信,特别是在TCP/IP协议栈上,C#的System.Net.Sockets命名空间提供了Socket类,可以方便地实现同步或异步的TCP通信。"C#_tcp异步通信类"是针对TCP网络通信的一种...
通过这个Demo,开发者不仅可以学习如何使用C#创建TCP客户端和服务器,还可以深入理解同步与异步网络通信的区别,并掌握如何在实际项目中灵活运用。此外,博主的博客可能提供了解决问题的额外资源,对于初学者和进阶...
C#提供了多种异步编程模型,如`async/await`关键字,事件基础的异步模式(EAP),以及基于任务的异步模式(TAP)。 对于TCP/IP客户端,C#中的`System.Net.Sockets.TcpClient`类是实现异步通信的关键。我们可以使用`...
除了基本的TTS功能,`DotNetSpeech.dll`可能还提供了更高级的特性,如改变声音类型、支持多语言、保存语音到文件等。这些功能可以通过探索类库的API文档或者示例代码来了解和使用。 在提供的`TTS语音实例`项目中,...