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 步中,每个套接字类型需要不同的事件。
提示 |
---|
在运行时,服务器应用程序通常先准备与开始 “侦听”,在客户端应用程序寻求连接。如果服务器未就绪,当客户端尝试连接到时,您通常需要用户应用程序后尝试再次连接。 |
设置服务器套接字和客户端之间的通信套接字
构造 CSocket 对象。
使用对象创建基础 套接字 处理。
对于 CSocket 客户端对象,,除非您需要数据进行套接字,您通常应使用默认参数。 创建。对于 CSocket 服务器对象,则在 创建 必须指定端口调用。
说明 CArchive 不与数据进行套接字一起使用。如果要对数据进行套接字使用 CSocket ,必须使用类,因为您将使用 CAsyncSocket,也就是说,,而无需存档。由于数据进行不可靠的 (不保证到达和能重复或不按顺序),它们与序列化兼容通过存档。希望序列化操作可靠和按顺序完成。如果您尝试对数据进行用于 CArchive 对象的 CSocket , MFC 断言失败。
如果套接字是客户端,请调用 CAsyncSocket::Connect 连接到服务器套接字的套接字对象。
- 或 -
如果套接字是服务器,请调用 CAsyncSocket::Listen 启动侦听联接来自客户端的尝试。在收到连接请求后,通过调用 CAsyncSocket::Accept接受。
说明 接受 成员函数采用对新,空 CSocket 对象作为其参数。,在调用 接受之前,必须构建此对象。如果此套接字对象超出范围,连接将关闭。不要调用此新套接字对象的 创建 。
创建一 CSocketFile 对象,关联 CSocket 对象与它。
创建填充 (接收) 或存储的 () 发送数据的一 CArchive 对象。存档与 CSocketFile 对象。
注意 CArchive 不与数据进行套接字一起使用。
使用传递数据的 CArchive 对象在客户端和服务器之间套接字。
记住特定 CArchive 对象仅沿一个方向的数据:用于加载 (接收) 或存储 (发送)。有时,您将使用两 CArchive 对象:一个发送的数据,其他接收的确认。
在接受连接和设置存档后,您可以执行此类任务与验证密码。
销毁存档、套接字文件和套接字对象。
说明 专门类别 CArchive 提供 IsBufferEmpty 成员函数用于与类 CSocket的使用。,例如,如果缓冲区包含多个数据所需的信息循环,直到所有阅读,并清除缓冲区。否则,您的下一个通知具有将收到的数据无限期延迟。使用 IsBufferEmpty 确保检索所有数据。
文章 Windows套接字:操作的顺序 声明此两侧的过程与代码示例。
有关更多信息,请参见: