Windows套接字:使用选件类CAsyncSocket

本文说明如何使用类 CAsyncSocket。请注意此类封装 Windows 套接字 API 在非常低级别。CAsyncSocket 供详细了解网络通信的程序员使用,但需要回调的网络事件的通知。基于此假定,本文只提供基本的命令。您可能应考虑使用 CAsyncSocket ,如果需要 windows 套接字的方便处理在 MFC 应用程序的多个网络协议,但不会牺牲灵活性。您可能还希望除了可以使用类 CSocket可以获取通过直接编程通信改进性能。更常规的备用模型。

CAsyncSocketMFC 引用 中有记录.。Visual C++ 还提供 Windows 套接字规范,位于 Windows SDK。细节留给您。Visual C++ 不提供 CAsyncSocket的示例应用程序。

如果没有高度了解网络通信并不需要简单,请使用 CArchive 对象的类 CSocket 。请参见 Windows 套接字:使用套接字与存档 有关更多信息。

本文包括:

  • 创建和使用 CAsyncSocket 对象。

  • 您的 CAsyncSocket 的职责。

创建和使用 CAsyncSocket 对象

使用 CAsyncSocket

  1. 构造 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 套接字:端口和存储地址解释。

  2. 如果套接字是客户端,使用 CAsyncSocket::Connect,请连接到服务器套接字的套接字对象,。

    - 或 -

    如果套接字是服务器,请设置套接字启动侦听 (与 CAsyncSocket::Listen) 联接来自客户端的尝试。在收到连接请求后,接受它与 CAsyncSocket::Accept

    在接受连接后,您可以执行此类任务与验证密码。

    说明说明

    接受 成员函数采用对新,空 CSocket 对象作为其参数。,在调用 接受之前,必须构建此对象。如果此套接字对象超出范围,连接将关闭。不要调用此新套接字对象的 创建 。有关示例,请参见中的文章 Windows 套接字:操作的顺序

  3. 通过调用封装 Windows 套接字 API 函数的 CAsyncSocket 对象的成员函数执行与其他套接字的通信。

    请参见 Windows 套接字规范和类在 MFC 引用中CAsyncSocket

  4. 销毁 CAsyncSocket 对象。

    如果创建了堆栈上的套接字对象,其调用析构函数,该函数包含的功能超出范围。使用 new 运算符,如果创建了堆中的套接字对象,在中,您负责使用 delete 运算符销毁对象。

    析构函数在销毁对象之前调用对象的 关闭 成员函数。

有关此顺序的示例在代码中 (实际上 CSocket 对象),请参见 Windows 套接字:操作的顺序

您的 CAsyncSocket 的职责

在创建类 CAsyncSocket对象时,对象封装 windows 套接字 句柄并提供了处理的操作。当您使用 CAsyncSocket时,必须处理完所有问题可以文本,如果直接使用 API。例如:

  • “块”方案。

  • 发送的和接收的计算机之间的字节序列差异。

  • 将 Unicode 和多字节字符集 (mbcs) 字符串之间。

有关这些术语和附加信息的定义,请参见 Windows 套接字:块Windows 套接字:字节顺序Windows 套接字:将字符串

尽管这些问题,类 CAsycnSocket 可能是您的正确选择,如果应用程序要求所有灵活性和控件可以访问。否则,应考虑使用类 CSocketCSocket 隐藏大量详细信息。:它发送消息块调用过程的窗口并允许您将 CArchive的访问,管理字节顺序差异以及字符串将您的。

有关更多信息,请参见:

请参见

概念

在MFC的Windows套接字