Windows套接字:使用套接字与存档

本文介绍 CSocket 编程模型。 类 CSocket 比类 CAsyncSocket提供套接字支持在较高级别的抽象。 CSocket 使用 MFC 序列化协议的版本来回套接字对象通过 MFC 数据 CArchive 对象。 CSocket 提供块 (在管理后台处理 windows 消息时) 并允许您为 CArchive的访问,使用原始的 API 或类 CAsyncSocket,管理对对应关系的许多方面需要执行自身。

提示

您可以单独使用类 CSocket ,作为 CAsyncSocket的一个更简便的版本,但是,最简单的编程模型是用于 CArchive 对象的 CSocket

有关套接字的实现具有方式的更多信息存档工作,请参见 Windows套接字:套接字具有如何的存档工作。 有关代码示例,请参见 Windows套接字:操作的顺序Windows套接字:套接字的示例使用中的存档。 有关可以通过派生您的类获取从套接字类的某些功能的信息,请参见 Windows套接字:从派生存储选件类

备注

如果正在编写一个 MFC 客户端程序与已建立的 (非 MFC) 服务器通信,不要将存档发送 C++ 对象。除非服务器是了解该对象的 MFC 应用程序要发送,无法接收和反序列化您的对象。有关通信的相关材料与非 MFC 应用程序,还请参见中的文章 Windows套接字:字节顺序

CSocket 编程模型

使用 CSocket 对象涉及一起创建和关联几个 MFC 类的对象。 在下面的一般过程,每个步骤按服务器套接字和客户端套接字采用,除第 3 步中,每个套接字类型需要不同的事件。

提示

在运行时,服务器应用程序通常先准备与开始 “侦听”,在客户端应用程序寻求连接。如果服务器未就绪,当客户端尝试连接到时,您通常需要用户应用程序后尝试再次连接。

设置服务器套接字和客户端之间的通信套接字

  1. 构造 CSocket 对象。

  2. 使用对象创建基础 套接字 处理。

    对于 CSocket 客户端对象,,除非您需要数据进行套接字,您通常应使用默认参数。 创建。 对于 CSocket 服务器对象,则在 创建 必须指定端口调用。

    备注

    CArchive 不与数据进行套接字一起使用。如果要对数据进行套接字使用 CSocket ,必须使用类,因为您将使用 CAsyncSocket,也就是说,,而无需存档。由于数据进行不可靠的 (不保证到达和能重复或不按顺序),它们与序列化兼容通过存档。希望序列化操作可靠和按顺序完成。如果您尝试对数据进行用于 CArchive 对象的 CSocket , MFC 断言失败。

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

    - 或 -

    如果套接字是服务器,请调用 CAsyncSocket::Listen 启动侦听联接来自客户端的尝试。 在收到连接请求后,通过调用 CAsyncSocket::Accept接受。

    备注

    接受 成员函数采用对新,空 CSocket 对象作为其参数。,在调用 接受之前,必须构建此对象。如果此套接字对象超出范围,连接将关闭。不要调用此新套接字对象的 创建

  4. 创建一 CSocketFile 对象,关联 CSocket 对象与它。

  5. 创建填充 (接收) 或存储的 () 发送数据的一 CArchive 对象。 存档与 CSocketFile 对象。

    注意 CArchive 不与数据进行套接字一起使用。

  6. 使用传递数据的 CArchive 对象在客户端和服务器之间套接字。

    记住特定 CArchive 对象仅沿一个方向的数据:用于加载 (接收) 或存储 (发送)。 有时,您将使用两 CArchive 对象:一个发送的数据,其他接收的确认。

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

  7. 销毁存档、套接字文件和套接字对象。

    备注

    专门类别 CArchive 提供 IsBufferEmpty 成员函数用于与类 CSocket的使用。,例如,如果缓冲区包含多个数据所需的信息循环,直到所有阅读,并清除缓冲区。否则,您的下一个通知具有将收到的数据无限期延迟。使用 IsBufferEmpty 确保检索所有数据。

文章 Windows套接字:操作的顺序 声明此两侧的过程与代码示例。

有关更多信息,请参见:

请参见

参考

CSocket::Create

概念

在MFC的Windows套接字