基于异步委托方式的Socket通信研究
基于异步委托方式的通信研究 Socket
邹捷
西安政治学院军事系西安 ,, 710068,
摘要在基于
的网络应 用 开 发中 是 一 种常 用 的 机制 阐 述 在中 进 行, TCP/IP ,Socket 。 .NET
通信开发的常用方法 通过多线程的方式实现数据流的读取和发送并
这种方 Socket ,,
法存在的问题重点提出并实现一种利用异步委托方式改善通信复杂度和提高稳定性的方 。
法。
关键词多线程异步委托, , Socke,t
信应用存在着很多的并发的接收和发送动作为了,, 引 言0 高效率往往通过多线程的方式来进行通信,。 也被称为套接字 用于描述 地址和端 Socket , IP
口作为网络通信连接的句柄在基于 的网络 ,。 TCP/IP 服务器端的监听及新连接处理1.1
服务器的一个重要任务就是持续监听端口等 应用开发中通信方式是一种常用的机制,,由于 ,Socket 。
协议的广泛应用使得 通信方式具有非 客户端的连接当收到新的连接请求时建立连接TCP/IP , Socket 。 ,, 常强的适用性除了用于网络通信之外还可以应用于 ,, 进行相应的处理服务器的监听是一个连续不断的。跨平台通信硬件控制进程间通信等多种场合、、。 Socket 程当新连接建立后还需要继续监听循环不断在,,,。 通信应用程序通常运行时间长对环境变化敏感并发 、、行监听动作 时当前线程将阻塞于此所以Listen ,。 , 控制复杂因此如何保证 通信稳定高效可 。 ,Socket 、,务器的监听处理不能放在主线程中必须放在一个 ,,靠是一个非常重要的问题本文对使用 语言在, 。 C# 立的线程中否则将导致主界面无响应,。 平台下进行 通信开发的方法进行了探讨.NET Socket ,
当收到连接请求后服务器端将建立一个新的, 着重提出并实现了一种利用异步委托方式改善通信复
杂度和稳定性的方法。 接这个连接可能会存在一段时间进行数据的收发。 ,
连接的处理和主线程以及监听线程有相对独立性,
需要放在一个独立的线程中。
下的多线程 通信方式 1 .NET Socket 连接线程的处理1.2
在中对中的套接字服务进 .NET , Winsock32API 在连接线程中无论在服务器端还是客户端都 ,,行 了 封 装 在 命 名 空 间 里 包 含 了 , System.Net.Sockets 要相同的处理信息的收发可以将连接的收发分开 ,。
套接字接口使得开发 通信程序的难 Windows , Socket 理在连接线程中主要完成数据的接收而把数据的,, 度大大降低通信有两种类型面向连接的 。 Socket ,TCP
送放到一个公共的线程中也可以把接收和发送放,方式和 报文方式当前的应用以 方式居多UDP , TCP ,
一个线程中处理后者相对简单以下是这种方法的。 ,
_port)); 阻塞读如果接收到数据放到接收缓冲区中,,,,, 1
阻塞读方法设定有一个超时值如果超时将 ,2,,,serverSocLisk.ten(10);
进行后面的动作, serverSock.BeginAccept(Anew syncCallbac k (OnConnectR- e
检查发送缓冲如果有待发送的内容则进行发 ,3,,quest),s erverSock );送没有则继续往后执行,, 异步的连接事件处理中将为请求的连接建立一 , 线程 一段时间,4,sleep , 个新的连接, 循环再次回到进行阻塞读,5,,,1,。 private void OnConnectRequest(IAsyncResult
ar){ Socket listener= (Socket)arA.syncState; 多线程处理的不足1.3 新的连接Socketli nk = listener.EndAccept(ar); // 使用多线程的方式进行 通信是最常用最 Socket ,、… … 直观的方法容易理解代码逻辑也比较直观但是使 ,,。 ,
用这种方式也有不足之处, 异步的数据发送和接收2.2
在服务器端监听连接线程读入数据时都采,1,、, 当建立连接后需要为连接指定异步的接收方法,
和异步发送方法由于发送过程往往是主动的可以由。 , 必须采用多线程方式处理才能不影用了阻塞的方式。用户控制而接收过程则需要等待所以异步接收更有 ,, 响程序的执行而过多的线程操作增加了程序的复杂,,实际意义异步的接收方法是。 , 度。
AsyncCallback recieveData = new AsyncCallback (O- nRe由于线程的创建管理都需要开发者来进行控 ,2,、
cievedData); 制而网络的情况又复杂多变对程序的稳定性影响较 ,,
sock.BeginReceive (msgBuff, 0, msgBuff .Length, Soc ke-t 大。
多线程方式开发较复杂不便用于一些轻量级 Flags.None, recieveData,sock ); ,3,,
而指定的异步接收委托方法是, 的应用场合。 private void OnRecievedData(IAsyncResult
ar){ Socket sock= (Socket)arA.syncState; 使用异步方式处理2 int nBytesRec= sockE.ndReceive(ar); 的 通信支持异步方式它不用阻塞等 .NET Socket ,string sRecieved= E ncoding.ASCII.GetString(msgBuff,0, 待当事件发生后会自动调用回调函数进行处理异 ,,。 nBytesRec); 步方式通信从本质上来说仍然也是以多线程方式进 ,,
行的当执行异步委托时也不是在主线程执行而是 ,,,对于发送既可以用同步的发送方法 也可以,, Send在独立的线程中执行只不过这些独立线程来源于系 。 用异步的方法 ,其处理方法和接收相似。BeginSend统的线程池由系统分配和维护对用户来说无需管 ,,, 连接过程2.3 理和控制这样就降低了代码的复杂度同时减少了因 。 ,
对客户端而言可以用异步方法 连 , BeginConnect 为线程管理不当影响系统稳定性的风险。
接到服务器端。
_sockB.eginConnect (epServer, newAs yncCallback (OnCo-n 使用异步方式进行服务器监听2.1 nect),_s ock); 通过异步方式进行服务器监听无需阻塞只要调,,
该方法设定的连接建立处理 中可以, OnConnect 就可以继续执行后面的代码用 方法后, BeginAccept 从参数中获得建立的连接。了方法中需要指定一个委托当有连接。 ,, BeginAccept Socket sock= (Socket)arA.syncState; 请求到来时由它来处理代码如下,,, sockE.ndConnect(ar); serverSock = new Socket (A ddressFamily.InterNetwor, k
异步委托方式通信的效率测试3 SocketType.Stream, ProtocolTye.Tcpp);
serverSock.Bind (nIPEew n dPoint (IPAddress.Parse(_ip ), 对异步委托方式的通信进行通过编写测试程序,
了测试在一台 速龙 的 内存的计,、 AMD 2800+CPU2G 结 语4 算机上运行由客户端向服务器端发送长度在 字, 100 尽管异步的处理方式对用户来说有些不自然,
节以内的数据包结果如下,, 比的确能够带来程序结构的简化和稳定性的提高,单连接 不进行 处理平均每秒接收 个 ,1,,UI ,350 适用于轻量级的应用因此是一种值得研究和应用, 数据包, 通信方式Socket 。
多个客户端同时连接服务器接收的峰值为每 ,2,,
秒 个数据包500 , 参考文献如果进行较大规模的 处理在 中显 ,3,UI ,TextBox 赵晓静用 实现套接字通信通信技术[1]. C# [J]. ,2008(1) 2
王静曲凤娟基于 的多用户并发通信的设计[2],. Socket [J]. 示每次的接收内容将会大大降低响应时间平均接,,,
建电脑,2007(0)3 收每秒 个数据包 ,20
服务器在密集收发时可以通过某个连接手工 ,4,,杜敏协 议 栈 的 轻 量 级 多 线 程 实 现复 旦 大 学[3]. TCP/IP [D].
发送数据。 2009
Research on the Socket Communications Based on
Asynchronous Delegate
ZOU Jie
(Departmentof Military, Xi'an Politics Institute,X i'an 710068)
Abstract: In the TCP/IP protocol -based network application development,i sSocket a common me cha-
nism. Discussesthe common methodsof the Socket application, realizes readanding se nding data stream by multi-threadedway, and analyses the problem of this method. Proposes rande-
alizes an asynchronous delegateto mprove communcation complexity andmprove stability. iii
Keywords: Multi-Thread;Socket; Asynchronousle gateDe