套接字性能技术示例

更新:2007 年 11 月

此示例演示如何使用 System.Net.Sockets.Socket 类中的增强功能来生成一个服务器应用程序,该服务器应用程序使用异步网络 I/O 来获得最高性能。

有关使用这些示例的信息,请参见下面的主题:

使用命令提示生成示例

  1. 打开命令提示窗口,然后定位到 AsyncSocketServer 目录下的 CS 子目录。有关所需设置和 SDK 命令提示的信息,请参见如何:设置示例设置

  2. 在命令行中键入 msbuild AsyncSocketServer.sln。此命令将同时生成 AsyncSocketServer 和 AsyncSocketClient 应用程序。

使用 Visual Studio 生成示例

  1. 打开 Windows 资源管理器,然后定位到 AsyncSocketServer 目录下的 CS 子目录。

  2. 双击 AsyncSocketServer.sln 的图标以在 Visual Studio 中打开该文件。

  3. 在“生成”菜单中选择“生成解决方案”。

AsyncSocketServer 和 AsyncSocketClient 应用程序都是在默认的 \bin 或 \bin\Debug 目录中生成的。

运行示例

  1. 使用命令提示窗口,定位到包含新的可执行文件的目录。

  2. 在命令行中键入 AsyncSocketServer.exe 及相应的命令行参数以运行 AsyncSocketServer 应用程序。

  3. 在命令行中键入 AsyncSocketClient.exe 及相应的命令行参数,以运行用于测试 AsyncSocketServer 应用程序的 AsyncSocketClient 应用程序。

要求

本示例需要 .NET Framework v3.5、3.0 SP1 或 2.0 SP1。

演示

System.Net.Sockets.Socket 类中添加了一系列新类作为增强功能集的一部分,可提供可供专用的高性能套接字应用程序使用的可选异步模式。这些增强功能是专为需要高性能的网络服务器应用程序而设计的。应用程序可以完全使用增强的异步模式,也可以仅仅在应用程序的目标区域(例如,在接收大量数据时)使用此模式。

AsyncSocketServer 示例演示如何通过实现回显服务器以在 System.Net.Sockets.Socket 类上使用这些新方法。服务器将从客户端读取的所有数据发送回客户端。在此示例中实现的回显服务器将同时处理多个客户端(最多为命令行参数指定的最大数目),并突出显示基于事件的异步套接字方法的某些重要元素。AsyncSocketServer 示例演示如何创建可重用数据缓冲区和 System.Net.Sockets.SocketAsyncEventArgs 上下文对象的池,以作为一种提高服务器性能的方法。

AsyncSocketClient 示例是一个用于测试 AsyncSocketServer 示例应用程序的简单客户端应用程序。AsyncSocketClient 示例不会使用 System.Net.Sockets.Socket 类中的任何新的增强功能。

AsyncSocketServer 应用程序需要四个命令行参数。

AsyncSocketServer.exe <numConnections> <receiveSize > <addressFamily> <localPortNum>

参数如下:

  • numConnections - 服务器将接受的最大同时连接数。

  • receiveSize - 服务器针对每个接收操作所使用的缓冲区大小(以字节为单位)。

  • addressFamily - 服务器将用于侦听传入连接的套接字的地址族。支持的值为 ipv4 和 ipv6。

  • localPortNum - 服务器将绑定到的本地端口。

下面的用法示例允许 IPv4 上包含 500 个连接并侦听端口 8000,而且对每个接收操作使用 1024 字节的缓冲区大小:

AsyncSocketServer.exe 500 1024 ipv4 8000

AsyncSocketClient 应用程序需要两个命令行参数。

AsyncSocketClient.exe <destIPAddress> <destPortNum>

参数如下:

  • destIpaddress - AsyncSocketServer 要连接到的目标 IP 地址。

  • destPortNum - AsyncSocketServer 的目标端口号。

请参见

参考

System.Net.Sockets.Socket

System.Net.Sockets.SendPacketsElement

System.Net.Sockets.SocketAsyncEventArgs

System.Net.Sockets.SocketAsyncOperation