Windows 套接字:使用类 CAsyncSocket

本文说明如何使用类。CAsyncSocket 请注意此类封装 Windows 套接字 API 在很低。 CAsyncSocket 由详细知道网络通信的程序员使用,但需要回调使用网络事件通知的。 基于此假设,本文只提供的基本指令。 则可能应考虑使用 CAsyncSocket,则需要 Windows 套接字的方便处理在 MFC 应用程序的多个网络协议,但是不想为了牺牲灵活性。 还可能认为您可以比使用 CSocket类可以通过直接通信编程可以获得更佳的效率"更为一般性的备用模型。

CAsyncSocket记录在MFC Reference中。 Visual C++ 还提供 Windows 套接字规范,位于 Windows SDK。 详细信息留到您。 Visual C++ 不提供 CAsyncSocket的示例应用程序。

如果不指定熟知有关网络通信不需简单解决方案,使用 CArchive 对象的类。CSocket 参见 Windows 套接字:将存档的套接字。更多信息。

本文包含:

  • 创建和使用 CAsyncSocket 对象。

  • 与 CAsyncSocket 的职责。

创建和使用 CAsyncSocket 对象

使用 CAsyncSocket

  1. 构造对象并使用 CAsyncSocket 对象创建基础 SOCKET 句柄。

    套接字创建执行两阶段 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

    • 套接字“Address”,如“”或 ftp.microsoft.com“128.56.22.8”。

      这种网络上的 Internet 协议 (IP) 地址。 您可能总是将依赖于该参数的默认值。

    术语“端口套接字”和“地址”。Windows 套接字:端口和套接字 Addresses解释。

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

    - 或 -

    如果套接字是服务器,请设置套接字开始侦听 (带有 CAsyncSocket::Listen) 用于从客户端连接尝试。 在收到请求之后连接,请接受它与 CAsyncSocket::Accept

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

    备注

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

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

    参见 Windows 套接字规范和类" MFC 参考"中的CAsyncSocket

  4. 销毁 CAsyncSocket 对象。

    如果在堆栈上创建了套接字对象,其调用析构函数的函数,当包含超出范围。 使用 new 运算符,如果要创建在堆的套接字对象,就得销毁对象,使用 删除 运算符。

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

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

你的CAsyncSocket 的职责。

CAsyncSocket类创建对象时,对象封装 Windows SOCKET 句柄并提供该句柄的操作。 当您使用 CAsyncSocket时,必须处理可能面临,则直接使用 API 的所有问题。 例如:

  • “阻止”方案。

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

  • 转换在 Unicode 和多字节字符集 (MBCS) 字符串之间。

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

尽管这些问题,类 CAsycnSocket 可能为您正确的选择,如果应用程序要求所有的灵活性和控件可以获取。 否则,应考虑使用 CSocket 类。 CSocket 隐藏您从大量的详细信息:它正在发送 Windows 消息在调用期间锁定并可以访问 CArchive,管理字节顺序差异和字符串转换您的。

有关详细信息,请参阅:

请参见

概念

MFC 中的 Windows 套接字