异步Socket编程I

在网络编程中,异步通讯和同步通讯的区别

下面,用一个例子来解释同步通讯和异步通讯的根本区别。

假定一个服务器应用程序在指定端口监听客户端发送来的数据。在同步通讯接收中,当服务器等待从客户端接收数据时,如果流没有数据,那么,主线程会阻塞,直到数据请求得到。因此,在这段时间,服务器端不能进行任何工作,直到接收到该客户端的数据。如果此时,另一个客户端需要连接服务器,由于服务器阻塞在第一个客户端上,所以,不能接收新的请求。对于需要同时支持多台客户端的现实应用中,这个方法显然是不可取的。

异步通讯中,当服务器端监听或接收客户端数据时,仍然可以处理其他客户机的请求或接收数据。当服务器异步接收时,Socket事件触发,则一个单独的线程监听Socket,并且会引发一个回调(callback)函数(在异步监听刚刚开始的时候引发)。这个回调函数会依次的响应,并处理Socket事件。例如,远端程序在socket中写入了一些数据,一个“读取数据事件”(自定义的回调函数)会触发,该事件知晓如何从socket中读取数据。

虽然异步通讯可以通过使用多线程来实现,但c#和.NET frameworks提供了一系列的方法来实现异步通讯,而不需要使用复杂的线程的知识。

Socket类

Socket类(System.Net.Sockets.Socket)提供了一系列同步和异步通讯的方法。在.NET命名协议中,所有的异步方法名都是以“Begin”或“End”作为同步方法名的前缀。以“Begin”或“End”为前缀的方法名,表示与同步通讯方法名相对应的一对异步通讯方法。如下所示。

同步通讯方法异步通讯方法
Connect()BeginConnect(), EdnConnect()
Receive()BeginReceive(), EndReceive()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值