为什么我的CAsyncSocket类只能接收一次数据?

Shawphen2000 2004-08-05 12:02:51
我自定义了一个CMktSocket类和一个CServerSocket类,这两个类都继承于CAsyncSocket类。在CServerSocket类中有一个CMktSocket的对象,视图类中有个CServerSocket类的对象,用CMktSocket来发送和接收数据,用CServerSocket来侦听客户端。
我的CMktSocket只能接收一次数据,但是它可以多次发送数据。不知道是为什么啊?
...全文
153 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Shawphen2000 2004-08-05
问题解决了,多谢laiyiling!结贴。
原来问题在于我接收第一次数据后没有AsyncSelect(FD_WRITE | FD_READ | FD_CLOSE)
回复
Shawphen2000 2004-08-05
laiyiling(最熟悉的陌生人)
你所指的是客户端的是吗?我的客户端的代码是以前的人写好的,成熟的。我说的问题是存在于服务端这边的。
回复
Kudeet 2004-08-05
YourConnectFunc()
m_socket.connect();//做了连接,马上返回
m_socket.AsyncSelect(FD_CONNECT) //申请事件:连接返回后通知我,不管成功失败
//连接事件
OnConnect(int nErrCode) //参数是错误代码
//首先检查有无错误发生
//做你想做的事情,比如初始化某些变量
//...
// 我想发送数据,当网络可写时告诉我,连接中断时也告诉我,比如服务器close了
m_socket.AsyncSelect(FD_WRITE | FD_CLOSE)

OnWrite(int errocode)
//首先检查有无错误发生

//正常,网络已经可以写了
//发送数据
m_socket.send()

//我想接受服务器反馈,当由数据到达时告诉我,连接中断时也告诉我,比如服务器close了
m_socket.AsyncSelect(FD_READ | FD_CLOSE)

OnRead()
//首先检查有无错误发生

//正常,数据已经可以读了
//读取数据
m_socket.receive()
m_socket.AsyncSelect(FD_WRITE | FD_CLOSE)

Q:很多人问为什莫要多次调用AsyncSelect?
A:现在是可读的,不等于过十分钟也可读,就是说Create 一个socket时可写,不代表永远可写,等需要写的时候要在检查。
回复
Shawphen2000 2004-08-05
具体怎么做啊?我是第一次接触网络编程。
我的CAsyncSocket是可以多次发数据的啊,只有接数据的时候收到第一次的数据后,后面的数据就收不到了。
回复
vcar 2004-08-05
把CAsynSocket关联到窗体,使用消息来处理收发数据。一次消息当然只能是一次收发数据了。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-05 12:02
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……