windows下网络编程(三)——MFC CAsyncSocket 分析

本文介绍了CAsyncSocket在Windows下的网络编程应用,重点讲解了同步、异步、阻塞和非阻塞的概念。CAsyncSocket是一个异步非阻塞类,采用WSAAsynSelect模型,通过消息机制处理网络事件。文章还讨论了CAsyncSocket的通信流程,包括OnSend和OnReceive的触发机制,并解决了发送消息只能发送一次的问题。
摘要由CSDN通过智能技术生成

 一些网络的基本概念

1.       同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式

2.       异步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式

3.       阻塞:指调用某函数时,直到该函数完成操作,才返回;否则一直阻塞在该调用上

4.       非阻塞:指调用某操作时,不管操作是否成功都立即返回,而不会挂在该操作上

CAsyncSocket属于异步非阻塞类;

CSocket是MFC在CAsyncSocket基础上派生的一个同步阻塞Socket的封装类(详细内容会在下一篇博文中)

CAsyncSocket异步机制

由于CAsyncSocket采用的是异步非阻塞机制,所以你随时可以发包,也随时可能收到包。

发送、接收函数都是异步非阻塞的,顷刻就能完成,所以收发交错进行着。也正因为如此,仅调用它们并不能保障发送或接收的完成。

例如发送函数Send,调用它可能有3种结果:错误、部分完成、全部完成。其中错误又分两种情况:一种是由各种网络问题导致的失败,你需要马上决定是放弃本次操作,还是启用某种对策;另一种是“忙”,你实际上不用马上理睬。你需要调用GetLastError来判断是哪种情况,GetLastError返回WSAEWOULDBLOCK,代表“忙”,为什么当你Send得
到WSAEWOULDBLOCK却不用理睬呢?因为CAsyncSocket会记得你的SendWSAEWOULDBLOCK了,待发送的数据会写入CAs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值