一些网络的基本概念
1. 同步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式
2. 异步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式
3. 阻塞:指调用某函数时,直到该函数完成操作,才返回;否则一直阻塞在该调用上
4. 非阻塞:指调用某操作时,不管操作是否成功都立即返回,而不会挂在该操作上
CAsyncSocket属于异步非阻塞类;
CSocket是MFC在CAsyncSocket基础上派生的一个同步阻塞Socket的封装类(详细内容会在下一篇博文中)
CAsyncSocket异步机制
由于CAsyncSocket采用的是异步非阻塞机制,所以你随时可以发包,也随时可能收到包。
发送、接收函数都是异步非阻塞的,顷刻就能完成,所以收发交错进行着。也正因为如此,仅调用它们并不能保障发送或接收的完成。
例如发送函数Send,调用它可能有3种结果:错误、部分完成、全部完成。其中错误又分两种情况:一种是由各种网络问题导致的失败,你需要马上决定是放弃本次操作,还是启用某种对策;另一种是“忙”,你实际上不用马上理睬。你需要调用GetLastError来判断是哪种情况,GetLastError返回WSAEWOULDBLOCK,代表“忙”,为什么当你Send得
到WSAEWOULDBLOCK却不用理睬呢?因为CAsyncSocket会记得你的SendWSAEWOULDBLOCK了,待发送的数据会写入CAs