请教如何用CAsyncSocket替代CSocket?

redeemer 2001-10-15 01:37:46
本人已完成一个邮件发送模块,可惜发送过程是异步阻塞的,因为用的是CSocket建立连接的,所以想用其父类CAsyncSocket来替代CSocket实现异步发送,即点击“发送”以后程序直接返回而不是阻塞,可是查看了MSDN等资料均不得法,哪位高手给予点拨?多谢!
...全文
126 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
caiyi9000 2001-10-18
  • 打赏
  • 举报
回复
to redeemer:
你是什么水平?CSocket是CAsyncSocket的派生类,当然是异步非阻塞的了!
redeemer 2001-10-17
  • 打赏
  • 举报
回复
非也,其实CSocket是个实实在在的阻塞同步类,这点我想不会有错,否则我也不会在这发愁了,因为我需要它不同步,调用后要能立即返回
redeemer 2001-10-16
  • 打赏
  • 举报
回复
楼上的,抱歉,我为我的鲁莽向你道歉,我以为你是在瞎搅和呢,可谁让你说“CSocket是异步非阻塞”呢?在不了解的情况下我只能凭借这句话来认知你了,当然现在我知道这是不对的了:)我的qq:290487,欢迎常联系,我现在被这个问题搞得心情很不好,抱歉!
caiyi9000 2001-10-16
  • 打赏
  • 举报
回复
to redeemer:
没关系,其实CSocket是CAsyncSOcket类的派生类 ,当然也是异步非阻塞的了!
caiyi9000 2001-10-15
  • 打赏
  • 举报
回复
to redeemer:
顾名思义,CAsyncSocket是一个异步SOCKET类。async就是异步单词的缩写。你知道ATM全称是什么?是什么意思吗?你知不知道用CAsyncSocket定义的对象,就已经是个异步对象了。
CAsyncSOcket m_Socket;
m_Socket.Create(...);
就已经将此socket设置为异步模式,并注册了ACCEPT,CONNECT,WRITE,READ,CLOSES等异步事件,你只要重载CAsyncSocket提供的虚函数OnAccept(), OnConnect(),OnReceive().OnSend(), OnClose()等,就可以响应这些网络异步事件了.具体编程方法如下:

服务器侧,一旦有连接请求到达时,程序就会执行到OnAccept(),在OnAccept()中,你可以调用m_Socket.Accept()接受一个连接请求,并返回一个socket与发起连接请求的客户端进行通信。
客户端侧,当发起一个连接请求时,就会执行到OnConnet()函数,你可以在OnConnect()中做相应处理。
服务器和客户端侧,当网络缓冲区中有网络数据到达时,均会执行到OnReceive()函数中,你就可以调用m_Socket.Recv()函数读取网络缓冲区中的数据了。注意接收网络数据的工作只能在OnReceve()中进行,因为你不知道什么时候有网络到达,只有OnReceive()函数才能通知你的程序有网络数据到达了。
服务器和客户端侧,当你发送网络数据时,均会执行到OnSend()函数,你可以在此函数中做一些发送网络数据时的处理工作。
在OnClose()函数中,你可以做一些通信对端断开后的善后处理工作。

其实如果你对winsock API熟悉的话,你自己都可以用SDK开发出一个CAsyncSocket类来。
如果你还不明白的话,请你到开发文档中看看我发表的文章《Windows网络编程经典入门》。否则不要在此乱咬人!
caiyi9000 2001-10-15
  • 打赏
  • 举报
回复
to redeemer:
我还没见过象你这样的笨蛋,还需要什么回调函数?先回家问问老婆!
redeemer 2001-10-15
  • 打赏
  • 举报
回复
caiyi9000,你回家看看说在来!
skyonsky,光说不练的家伙!
scklotz,好用在哪?听说CAsyncSocket需要一个回调参数才能实现异步,具体怎么做呢?
scklotz 2001-10-15
  • 打赏
  • 举报
回复
CAsyncSocket很好用。
接收数据在OnReceive里处理,发送数据就直接调用Send
skyonsky 2001-10-15
  • 打赏
  • 举报
回复
CSocket 是CAsyncSocket的派生类吧,CAsyncSocket当然可以做CSocket的工作
不过你的水平的相当高才行。
哈哈
caiyi9000 2001-10-15
  • 打赏
  • 举报
回复
有没有搞错,CSocket是异步非阻塞的吧!

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧