CAsyncSocket运作流程

MFC疑难注解:CAsyncSocket及CSocket MFC疑难注解:CAsyncSocket及CSocketfangle 2006-07-27MFC对SOCKET编程的支持其实是很充分的,然而其文档是语焉不详的。以至于大多数用VC编写的功能稍复杂的网络程序,还是使用API的。故CAsyncSocket及CSocket事实上成为疑难,群众多敬而远之。余好事者也,不忍资源浪费,特为之注解。一、CAsyncSocket与CSocket的区别前 阅读详情

使用CAsyncSocket时,Send流程和Recieve流程是不同的,不理解这一点就不可能顺利使用CAsyncSocket。

编辑摘要

 

CAsyncSocket运作流程 - 概述



MSDN对CAsyncSocket的解释很容易让你理解为:只有OnSend被触发时
你Send才有意义,你才应该Send,同样只有OnRecieve被触发时你才
应该Recieve。很不幸,你错了:

你会发现,连接建立的同时,OnSend就第一次被触发了,嗯,这很好,
但你现在还不想Send,你让OnSend返回,干点其他的事情,等待下一
次OnSend试试看?实际上,你再也等不到OnSend被触发了。因为,除
了第一次以外,OnSend的任何一次触发,都源于你调用了Send,但碰
到了WSAEWOULDBLOCK或只完成了部分发送!

所以,使用CAsyncSocket时,针对发送的流程逻辑应该是:你需两个
成员变量,一个发送任务表,一个记录发送进度。你可以,也应该,
在任何你需要的时候,主动调用Send来发送数据,同时更新任务表和
发送进度。而OnSend,则是你的负责擦屁股工作的助手,它被触发时
要干的事情就是根据任务表和发送进度调用Send继续发,若此次发送
没能将任务表全部发送完成,根据发送结果更新发送进度;若任务表
已全部发送完毕,则清空任务表及发送进度。

CAsyncSocket运作流程 - 相关

使用CAsyncSocket的接收流程逻辑是不同的:你永远不需要主动调用
Recieve,你只应该在OnRecieve中等待。由于你不可能知道将要抵达
的数据类型及次序,所以你需要一个成员变量来存储已收到但尚未处
理的数据。每次OnRecieve被触发,你只需要被动调用一次Recieve来
接受固定长度的数据,并添加到你的已收数据表后。然后你需要扫描
已收数据表,若其中已包含一条或数条完整的可解析的业务数据包,
截取出来,调用主线程的处理函数来处理或作为消息参数发送给主线
程。而已收数据表中剩下的数据,将等待下次OnRecieve中被再次组合
、扫描并处理。

在长连接应用中,连接可能因为各种原因中断,所以你需要自动重连。
你需要根据CAsyncSocket的成员变量m_hSocket来判断当前连接状态:
if(m_hSocket==INVALID_SOCKET)
当然,很奇怪的是,即使连接已经中断,OnClose也已经被触发,你
还是需要在OnClose中调用Close,否则m_hSocket并不会被自动赋值
为INVALID_SOCKET。

在很多长连接应用中,除建立连接以外,还需要先Login,然后才能
进行业务处理,连接并Login是一个步骤依赖性过程,用异步方式处
理反而会很麻烦,而CAsyncSocket是支持切换为同步模式的,你应该
掌握在适当的时候切换同异步模式的方法:

DWORD dw;

//切换为同步模式
dw=0;
IOCtl(FIONBIO,&dw);
...

//切换回异步模式
dw=1;
IOCtl(FIONBIO,&dw);

CAsyncSocket实现的简易网络聊天室 htmltable {th, td {th {pre {简介:本文介绍如何利用Microsoft Foundation Class (MFC)中的CAsyncSocket类在Windows环境下构建一个简易的聊天室程序。CAsyncSocket提供了面向对象的Winsock API封装,并支持异步网络操作,简化了网络通信编程。文章涵盖了从服务器端监听、客户端连接,到数据传输和事件处理的完整过程,并描述了界面交互及项目文件的组织。 阅读详情

相关推荐

MFC下使用CAsyncSocket类建立TCP客户端与服务器.zip

MFC下使用CAsyncSocket类建立TCP客户端与服务器, 主要进行继承CAsyncSocket类并重写它的虚函数, 工程分为服务器端与客户端, 可分别进行发送与接收数据, 并带有详细注释

CAsyncSocket close Onclose

客户端关闭 是服务端里面 客户端的socket 触发onclose  服务端里面客户端的socket close 触发客户端onclose

JINKAI 2406

利用netns做自环Iperf测试

netns可以让一台机器上模拟多个网络设备,是网络虚拟化的重要组成,将不同类型的网络应用隔离。一个net namespace有自己独立的路由表,iptables策略,设备管理。本文利用netns模拟网络来实现单机上网卡自环上的iperf测试或其他网络测试。

weixin_42414349的博客 3370

套接字CAsyncSocket调用connect没有触发onConnect解决方法

void CMFCSocketClientDlg::OnBnClickedButtonConnect() { pSocketClient = new CSocketClient(); UpdateData(TRUE); pSocketClient->m_strHost = m_Port; m_IP.GetWindowText(pSocketClient->m_strIP);...

Txwtech 2442

Matlab使用GitHub的踩坑记录(持续更新)

Matlab使用git的踩坑记录前言Matlab设置Git的官方帮助文档系统配置新建Git两种代码管理方式典型源代码管理SVN分布式源代码管理 Git注意:SVN和Git都可以用GitHub创建新的库 前言 作为Git初学者,对Git的代码版本管理非常非常喜欢,给了我极大的安全感。特别是想到之前的几次Matlab、Latex和python的代码莫名其妙被折腾没了又没法找回的悲剧,决定慢慢的走入gi...

voluntry的博客 7296

Windows显卡TDR超时导致Unity崩溃?手把手教你修改注册表延长响应时间

本文详细解析了Windows显卡TDR超时导致Unity崩溃的问题,并提供了修改注册表延长响应时间的完整解决方案。通过调整TdrDelay和TdrDdiDelay键值,开发者可以有效避免D3D11设备丢失错误,提升Unity编辑器的稳定性。文章还包含显卡驱动优化、系统性能调优等实用技巧,帮助开发者彻底解决编辑器崩溃问题。

weixin_33737774的博客 621

CAsyncSocket详解

一、CAsyncSocket异步机制 当你获得了一个异步连接后,实际上你扫除了发送动作与接收动作之间的依赖性。所以你随时可以发包,也随时可能收到包。发送、接收 函数都是异步非阻塞的,顷刻就能完成,所以收发交错进行着,你可 以一直工作,保持很高的效率。 但是,正因为发送、接收函数都是异步非阻塞的,所以仅调用它们并 不能保障发送或接收的完成。 例如发送函数Send,调用它可能有3种结果:错

Barry的博客 7939

如何在 Ubuntu 24.04 LTS 上安装 SSH 服务器?

Ubuntu是一个基于Debian的开源Linux操作系统,由Canonical Ltd.开发和维护。Ubuntu致力于提供用户友好、稳定且安全的操作系统环境,适用于个人用户、企业和服务器等不同场景。Ubuntu 24.04 LTS是Ubuntu发布的一个长期支持版本,LTS代表长期支持(Long Term Support)。这意味着Ubuntu 24.04 LTS将获得长达5年的安全更新和维护支持,使其成为企业和个人用户的理想选择。

网络技术联盟站 5888

CAsyncSocket之运作流程

    使用CAsyncSocket时,Send流程和Recieve流程是不同的,不理解这一点就不可能顺利使用CAsyncSocket。    MSDN对CAsyncSocket的解释很容易让你理解为:只有OnSend被触发时你Send才有意义,你才应该Send,同样只有OnRecieve被触发时你才应该Recieve。很不幸,你错了:你会发现,连接建立的同时,OnSend就第一次被触发了,嗯,这

李逸波(PMP) 1156

【LLM】大模型幻觉问题的原因和缓解方法

一、幻觉定义 备注(下面提及的两个名词): Faithfulness:是否遵循input content; Factualness:是否符合世界知识; 传统nlp任务重,幻觉大多数是faithfulness,比如Intrinsic Hallucination(冲突),摘要内容和document内容有冲突;再比如Extrinsic Hallucination(无中生有),生成内容中包含input要求的其他杂七杂八虚假信息;但LLM应该考虑的幻觉Factualness,因为数据源是Open-doman的世界知

发现问题,并解决问题,批判性思维 1万+

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5948

CAsyncSocket与CSocket的区别(即同步与异步)

一、CAsyncSocket与CSocket的区别 前者是异步通信,后者是同步通信;前者是非阻塞模式,后者是阻塞 模式。另外,异步非阻塞模式有时也被称为长连接,同步阻塞模式则 被称为短连接。为了更明白地讲清楚两者的区别,举个例子: 设想你是一位体育老师,需要测验100位同学的400米成绩。 你当然不会让这100位同学一起起跑,因为当同学们返回终点时,你 根本来不及掐表记录各位同学的成绩

4648

Open Dynamics Engine(ODE)物理引擎基础教程(I)——特点介绍

下一教程 Open Dynamics Engine(ODE)物理引擎基础教程(II)——相关概念 (在这一教程中将学习刚体、关节、碰撞的概念在ODE中的特点) 本文结构引言介绍特点使用ODE总结 引言 本文翻译自ODE官方教程英文版,有些地方增加了自己的理解。这一节介绍ODE的相关概念。 基础教程英文原版链接【http://ode.org/wiki/index.php?title=Manua...

腿足机器人领域 1676

CAsyncSocket与CSocket的区别

CAsyncSocket与CSocket的区别  CAsyncSocket与CSocket的区别一、CAsyncSocket与CSocket的区别 前者是异步通信,后者是同步通信;前者是非阻塞模式,后者是阻塞 模式。另外,异步非阻塞模式有时也被称为长连接,同步阻塞模式则 被称为短连接。为了更明白地讲清楚两者的区别,举个例子: 设想你是一位体育老师,需要测验100位同学的400米成

hugyxh的专栏 1081

【Windows Server 2019】存储服务器的配置和管理——iSCSI的安装和配置(下)

博文介绍了如何使用Windows 10 和 ESXi 验证iSCSI服务器部署成功以及如何管理iSCSI服务 。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 8000

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

CAsyncSocket与CSocket的区别 MFC网络编程

一、CAsyncSocket与CSocket的区别 前者是异步通信,后者是同步通信;前者是非阻塞模式,后者是阻塞 模式。另外,异步非阻塞模式有时也被称为长连接,同步阻塞模式则 被称为短连接。为了更明白地讲清楚两者的区别,举个例子: 设想你是一位体育老师,需要测验100位同学的400米成绩。 你当然不会让这100位同学一起起跑,因为当同学们返回终点时,你 根本来不及掐表记录各位同学的成绩

夜空的流星的专栏 4576

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MFC-CAsyncSocket的学习

是 MFC 中提供的一个类,用于实现异步 socket 操作,它封装了 WinSock 中的SOCKET类,并提供了异步操作的功能,使得程序可以在不阻塞的情况下处理网络通信。与常规的同步 socket 不同,在事件发生时通过消息机制通知程序,而不是通过函数调用等待响应。

weixin_45888658的博客 1426

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

MFC之CAsyncSocket详解

CAsyncSocket类是从Object类派生而来。CAsyncSocket对象称为异步套接字对象 使用CAsyncSocket进行网络编程,可以充分利用Windows操作系统提供的消息驱动机制,通过应用程序框架来传递消息,方便地处理各种网络事件。另一方面,作为MFC微软基础类库中的一员,CAsyncSocket可以和MFC的其他类融为一体,大大扩展了网络编程的空间,方便了编程。

小米的修行之路 1万+

一个CAsyncSocket例子

具体代码见 http://download.youkuaiyun.com/detail/qwertyuj/5233800 是从别人例子上略加修改。   server 端: 建个类作为server socket,主要处理OnAccept消息。 class CMySocket : public CAsyncSocket 其中包含几个虚函数  virtual void OnAccept(int nE

Luckyman 1万+

CAsyncSocket的用法

转载请注明出处blog.youkuaiyun.com/tianhai110这几天都在研么MFC的套接字类CAsyncSocket的用法, 将一些心得和实践中遇到的问题总结一下。 一、        一些网络的基本概念1.       同步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式;2.       异步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式

greatsong的专栏 3490

CAsyncSocket及CSocket

MFC疑难注解:CAsyncSocket及CSocket2009-12-21 20:23MFC疑难注解:CAsyncSocket及CSocketMFC对SOCKET编程的支持其实是很充分的,然而其文档是语焉不详的。以至于大多数用VC编写的功能稍复杂的网络程序,还是使用API的。故CAsyncSocket及CSocket事实上成为疑难,群众多敬而远之。余好事者也,不忍

fengxo的专栏 2756

浅析CAsyncSocket

    首先CAsyncSocket采用的WSAAsynSelect模型,WSAAsynSelect是一种异步I/O模型,通过该模型,应用程序可以接收以Windows消息为基础的网络事件通知。而我们这里讲的就是CSocketWnd,它是从CWnd继承的。class CSocketWnd : public CWnd{public: CSocketWnd();protected:

FlowShell的专栏 3516

CAsyncSocket

一、        一些网络的基本概念 1.       同步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式; 2.       异步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式 3.       阻塞:指调用某函数时,直到该函数完成操作,才返回;否则一直阻塞在该调用上 4.       非阻塞:指调用某操作时,不管操作是否成功都立即返回,而不会

如果我是超人 651
上一篇: CAsyncSocket的用法
下一篇: linux fgets
flymachine
博客等级 码龄23年 253粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值