注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 32位开发 > C/C++ 内容正文:Windows Sockets:使用 CAsyncSocket 类

Windows Sockets:使用 CAsyncSocket 类

发布时间:2006-05-05 19:03:31 来源:MSDN 网友评论 0 条

本文介绍 CAsyncSocket 类的用法。请注意,该类在非常低的级别上封装 Windows Sockets API。 CAsyncSocket 适合那些对网络通信细节很了解,但希望利用回调的便利通知网络事件的程序员使用。基于该假定,本文仅提供基本说明。如果想利用 Windows Sockets 方便地处理 MFC 应用程序中的多个网络协议,而又不想放弃灵活性,可以考虑使用 CAsyncSocket 。您可能也会感觉到,自己直接编写通信程序要比使用 CSocket 类的通用替换模型效果更好。

“MFC 参考”中对 CAsyncSocket 进行了描述。Visual C++ 也提供了位于 Platform SDK 中的 Windows Sockets 规范。具体细节由您决定。Visual C++ 不提供 CAsyncSocket 的示例应用程序。

如果您对网络通信不是很了解,希望获得一个简单的解决方案,请使用带 CArchive 对象的 CSocket 类。本文包括:

  • 创建和使用 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 。上面的第一个 Create 调用使用默认参数创建流式套接字,第二个 Create 调用创建具有指定端口和地址的数据文报套接字。(任一个 Create 版本都可以和任一种构造方法一起使用。)

    Create 的参数有:

    • “端口”:短整型。

      对于服务器套接字,必须指定端口。对于客户端套接字,通常接受此参数的默认值,该值允许 Windows Sockets 选择端口。

    • 套接字类型: SOCK_STREAM (默认值)或 SOCK_DGRAM 。
    • 套接字“地址”,如“ftp.microsoft.com”或“128.56.22.8”。

      该地址为网络上的网际协议 (IP) 地址。很可能要始终依赖此参数的默认值。

    关于术语“端口”和“套接字地址”的解释见 Windows Sockets:端口和套接字地址。

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

    - 或 -

    如果套接字是服务器,则将套接字设置为开始侦听(使用 CAsyncSocket::Listen)来自客户端的连接尝试。接收到连接请求时,用 CAsyncSocket::Accept 接受该请求。

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

    注意 Accept 成员函数采用对新的空 CSocket 对象的引用作为它的参数。在调用 Accept 之前,必须构造该对象。如果此套接字对象超出范围,则连接关闭。不要对这个新套接字对象调用 Create 。有关示例,请参见文章 Windows Sockets:操作顺序。
  3. 通过调用 CAsyncSocket 对象的封装 Windows Sockets API 函数的成员函数,与其他套接字进行通信。

    请参见“MFC 参考”中的 Windows Sockets 规范和 CAsyncSocket 类。

  4. 销毁 CAsyncSocket 对象。

    如果在堆栈上创建了套接字对象,当包含函数超出范围时将调用此对象的析构函数。如果使用 new 运算符在堆上创建了套接字对象,则您必须负责使用 delete 运算符销毁此对象。

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

有关代码中该顺序的示例(实际上是对于 CSocket 对象),请参见 Windows Sockets:操作顺序。您对 CAsyncSocket 的责任

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

  • “阻塞”方案。
  • 发送和接收计算机之间的字节顺序差异。
  • 在 Unicode 和多字节字符集 (MBCS) 字符串之间转换。

有关这些术语的定义和其他信息,请参见 Windows Sockets:阻塞、Windows Sockets:字节排序和 Windows Sockets:转换字符串。

尽管存在这些问题,但如果应用程序需要您能获得所有的灵活性和控制能力, CAsycnSocket 类可能是正确的选择。如果应用程序没有这种需求,可考虑使用 CSocket 类。 CSocket 向您隐藏大量详细信息:它在阻塞调用期间抽取 Windows 消息并赋予您访问 CArchive 的权限,而 CArchive 为您管理字节顺序差异和字符串转换。

相关文章
  • 使用Windows系统提供的IP控件
  • Windows Sockets API实现网络异步通讯
  • 用Winsock实现语音全双工通信使用
  • Windows Sockets:流式套接字
  • Windows Sockets:背景知识
【评论】【收藏本文】【打印】【关闭】
上一篇文章:Windows Sockets:从套接字类派生
下一篇文章:Windows Sockets:带存档的套接字的工作方式
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • 明晰C++内存分配的五种方法的区别
  • 浅议C++ 中的垃圾回收方法
  • Windows Sockets:阻塞
  • VC++中利用磁盘序列号识别正版软件
  • VC中利用CRC校验码为BMP图设置水印
  • VC中ftp协议实现多线程断点续传
  • Windows Sockets 示例列表
  • C++箴言:拷贝一个对象的所有组成部分
  • C/C++中数组和指针类型的关系的入门教程
  • C++箴言:理解inline化的介入和排除
阅读排行
  • 1.Borland 发布C++ Builder 2006 RAD 环境
  • 2.C/C++程序员应聘常见面试题深入剖析
  • 3.Visual C++常用数据类型转换详解
  • 4.C++中的 static 关键字
  • 5.利用VC++实现局域网实时视频传输
  • 6.浅谈C/C++内存泄漏及其检测工具
  • 7.英国投票否决C++/CLI 微软强攻ISO标准受挫
  • 8.VC++下用MSComm控件实现串口通讯
  • 9.伪随机数生成及在VC++中的实现
  • 10.VC++编程实现对波形数据的频谱分析
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载