异步客户端套接字在等待网络操作完成时不挂起应用程序。因为它使用标准 .NET Framework 异步编程模型在一个线程上处理网络连接,而应用程序继续在原始线程上运行。异步套接字适用于大量使用网络或者不能等待网络操作完成后才能继续执行的应用程序。
Socket类遵循异步方法的.Net Framework命名模式;例如,同步Receive方法对应异步BeginRecive和EndReceive方法。
异步操作要求回调方法返回操作结果。如果应用程序不需要知道结果,则不需要任何回调方法。
本节的代码示例阐释:
1、如何使用某个方法开始与某个网络设备进行连接,并使用回调方法结束连接;
2、如何使用某个方法开始发送数据,并使用回调方法完成数据发送;
3、如何使用某个方法开始接受数据,并使用回调方法结束接收数据。
异步套接字使用系统线程池中的多个线程处理网络连接。一个线程负责开始数据的发送或接收,其它线程完成与网络设备的连接并发送或接收数据。
在示例中,System.Threading.ManualResetEvent 类的实例用于挂起主线程的执行并在执行可以继续时发出信号。
在下面的示例中,为了将异步套接字连接到网络设备,Connect()方法初始化一个Socket,然后调用BeginConnect()方法,传递表示网络设备的远程终结点,连接回调方法,状态对象(即客户端 Socket,用于在异步调用之间传递状态信息)。
该实例实现Connect()方法以将指定的Socket连接到指定的终结点。它采用一个名为connectDone
的ManualResetEvent 类的实例,为全局变量。
public static void Connect(EndPoint remoteEP, Socket client)
{
client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client );
connectDone.WaitOne();
}
连接回调方法 ConnectCallback
实现 AsyncCallback 委托。它在远程设备可用时连接到远程设备,然后通过设置ManualResetEvent 的实例connectDone