.net 3.5平台上的Socket开发

 其实这篇文章在一年前就应该写了,不过一直觉得自己没空,一拖就拖到现在。先对大家说句对不起了。

 

在之前的文章中,我们讲了如何在.NET 2.0下面开发Socket项目。其中的异步Socket让我们得以很轻松的在.NET中开发高性能服务端应用。

但是,在实际应用中我们还是发现了一些问题的存在,如:我们在每一次操作的过程中都要创建一个IAsyncResult上下文对象,如果数据通讯很频繁的话,会导致大量的IAsyncResult对象被创建,大大的增加了垃圾回收器的工作量,从而降低了整个应用的效率。

.NET 3.5中,这个麻烦已经被解决了,在3.5 版本中,Socket定义了一些新的方法。这些方法不要求每一次操作都创建一个新的上下文对象。 

如,在2.0中我们采用下面的方式在Socket上启动一次接收操作。

Code

3.5中我们可以用新的方法完成一次接收操作。

Code

 

在这里我们可以看出3.5 和 2.0 的一个明显区别,那就是不是使用IAsyncResult而是用SocketAsyncEventArgs作为上下文对象。应用程序创建并管理(并且可以重复使用)SocketAsyncEventArgs 对象。套接字操作的所有参数都由 SocketAsyncEventArgs 对象的属性和方法指定。完成状态也由 SocketAsyncEventArgs 对象的属性提供。最后,需要使用事件处理程序回调完成方法。

让我们来看看代码:

首先我们创建一个用户类,用来存储和客户端有关的数据:

Code
接下来我们开始接入客户端连接:
Code

好了,我们开始接收数据:

Code
示例代码在:http://files.cnblogs.com/wzd24/ConsoleApplication2.rar
posted @ 2009-03-09 19:34  牧野  阅读(...)  评论(... 编辑 收藏