基于IHttpAsyncHandler的TCP收发器

本文介绍使用IHttpAsyncHandler进行TCP收发操作的方法。详细解释了MyAsyncResult类的用途及myAsyncFunction类中的AcceptClients函数如何处理客户端连接。文章还提供了具体的实现代码和效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载连接:http://www.cnblogs.com/scy251147/p/3392688.html


上一篇文章中,我们提到使用IHttpAsyncHandler来进行UDP的收发操作。由于UDP模型比较简单,所以运行没什么问题。这一篇我主要是使用IHttpAsyncHandler来进行TCP的收发操作。由于TCP的模型比较复杂,所以在设计的时候,稍微麻烦了一些。

核心讲解

首先,我贴上代码,然后来逐一讲解:

  View Code

对于WriteLog函数,我就不讲了,主要是用来写日志的。
对于MyAsyncResult类,主要是用来接收处理状态并返回,在EndProcessRequest(IAsyncResult result)中可以还原对象,然后做一些善后的工作,比如关闭数据库,清空缓存等等。

对于myAsyncFunction类,这是我们执行的主体,里面的AcceptClients函数是我们执行的核心。

对于AsyncSocketHandler类,它继承自异步handler:IHttpAsyncHandler,主要是用来进行异步处理的。

在下面的代码中:

复制代码
        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
        {
            lock (obj)
            {
                int port = Int32.Parse(context.Request.QueryString["port"].ToString());
                MyAsyncResult asyncResult = new MyAsyncResult(context, cb, extraData);  //实例
                   myAsyncFunction.Init(asyncResult, port); //接收所有传入的异步对象
                   myAsyncFunction.AcceptClients();   //处理所有传入的异步对象
                   asyncResult.isCompleted = true;
                return asyncResult;
            }
        }
复制代码

首先实例化MyAsyncResult对象,以便创建返回参数;然后初始化调用对象;初始化之后,开始调用我们的核心对象,也就是利用TCP接收Client的连接。最后返回执行对象。

复制代码
  public void EndProcessRequest(IAsyncResult result)
        {
            MyAsyncResult asyncResult = result as MyAsyncResult;
            if (asyncResult != null)
            {
                asyncResult.send(string.Empty);
            }
        }
复制代码

当异步执行完毕之后,就会进入EndProcessRequest函数,这个函数主要通过还原MyAsyncResult对象,实现清理等操作,这里我就不再赘述。

那么如何调用呢?

调用其实很简单,通过Ajax请求这个异步Handler,然后利用其Success方法打印出获取的对象就可以了。 需要注意的是,在Success方法中,我们可以再调用Ajax请求来实现循环获取Client Sockets。

  View Code

实现效果

最后看看我们实现的效果吧:

 

源码下载

点击这里下载源码

由于源码中有SignalR的示例,附件过大,我已经删除了相关的Signr附件,编译的时候,请首先运行 Install-Package Microsoft.AspNet.SignalR -version 1.0

 来获取相关的版本。我百度网盘放了全版本的:http://pan.baidu.com/s/15SDGG

 

解决方案中的SocketViaWeb项目下的Server.aspx 为服务端,Client.aspx为客户端。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值