Windows套接字:使用选件类CAsyncSocket
本文说明如何使用类 CAsyncSocket。请注意此类封装 Windows 套接字 API 在非常低级别。CAsyncSocket 供详细了解网络通信的程序员使用,但需要回调的网络事件的通知。基于此假定,本文只提供基本的命令。您可能应考虑使用 CAsyncSocket ,如果需要 windows 套接字的方便处理在 MFC 应用程序的多个网络协议,但不会牺牲灵活性。您可能还希望除了可以使用类 CSocket可以获取通过直接编程通信改进性能。更常规的备用模型。
CAsyncSocket 在 MFC 引用 中有记录.。Visual C++ 还提供 Windows 套接字规范,位于 Windows SDK。细节留给您。Visual C++ 不提供 CAsyncSocket的示例应用程序。
如果没有高度了解网络通信并不需要简单,请使用 CArchive 对象的类 CSocket 。请参见 Windows 套接字:使用套接字与存档 有关更多信息。
本文包括:
创建和使用 CAsyncSocket 对象。
您的 CAsyncSocket 的职责。
创建和使用 CAsyncSocket 对象
使用 CAsyncSocket
构造 CAsyncSocket 对象并使用对象创建基础 套接字 处理。
套接字的创建执行两阶段结构的 MFC 形式。
例如:
CAsyncSocket sock; sock.Create( ); // Use the default parameters
- 或 -
CAsyncSocket* pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create( nPort, SOCK_DGRAM );
上面的第一个构造函数在堆栈上创建 CAsyncSocket 对象。第二个构造函数创建堆中的 CAsyncSocket 。第一 创建 在使用默认参数创建流套接字上调用。第二 创建 调用用指定端口和地址创建数据进行套接字。(可以使用任何一个构造方法的任何一个 创建 版本。)
为 创建 的参数为:
“端口”:一个短整型。
对于服务器套接字,必须指定端口。对于客户端套接字,您通常接受此参数的默认值,使 Windows 套接字选择端口。
套接字类型: SOCK_STREAM (默认值) 或 SOCK_DGRAM。
套接字 “地址”,如 “ftp.microsoft.com”或 “128.56.22.8”。
这是您的网络上 (IP)的 internet 协议 (ip) 地址。您可能将始终依赖于此参数的默认值。
术语 “端口”和 “套接字地址”在 Windows 套接字:端口和存储地址解释。
如果套接字是客户端,使用 CAsyncSocket::Connect,请连接到服务器套接字的套接字对象,。
- 或 -
如果套接字是服务器,请设置套接字启动侦听 (与 CAsyncSocket::Listen) 联接来自客户端的尝试。在收到连接请求后,接受它与 CAsyncSocket::Accept。
在接受连接后,您可以执行此类任务与验证密码。
说明 接受 成员函数采用对新,空 CSocket 对象作为其参数。,在调用 接受之前,必须构建此对象。如果此套接字对象超出范围,连接将关闭。不要调用此新套接字对象的 创建 。有关示例,请参见中的文章 Windows 套接字:操作的顺序。
通过调用封装 Windows 套接字 API 函数的 CAsyncSocket 对象的成员函数执行与其他套接字的通信。
请参见 Windows 套接字规范和类在 MFC 引用中CAsyncSocket。
销毁 CAsyncSocket 对象。
如果创建了堆栈上的套接字对象,其调用析构函数,该函数包含的功能超出范围。使用 new 运算符,如果创建了堆中的套接字对象,在中,您负责使用 delete 运算符销毁对象。
析构函数在销毁对象之前调用对象的 关闭 成员函数。
有关此顺序的示例在代码中 (实际上 CSocket 对象),请参见 Windows 套接字:操作的顺序。
您的 CAsyncSocket 的职责
在创建类 CAsyncSocket对象时,对象封装 windows 套接字 句柄并提供了处理的操作。当您使用 CAsyncSocket时,必须处理完所有问题可以文本,如果直接使用 API。例如:
“块”方案。
发送的和接收的计算机之间的字节序列差异。
将 Unicode 和多字节字符集 (mbcs) 字符串之间。
有关这些术语和附加信息的定义,请参见 Windows 套接字:块, Windows 套接字:字节顺序, Windows 套接字:将字符串。
尽管这些问题,类 CAsycnSocket 可能是您的正确选择,如果应用程序要求所有灵活性和控件可以访问。否则,应考虑使用类 CSocket 。CSocket 隐藏大量详细信息。:它发送消息块调用过程的窗口并允许您将 CArchive的访问,管理字节顺序差异以及字符串将您的。
有关更多信息,请参见: