FD_READ FD_CONNECT等的触发时间,触发顺序是怎样的?

D0ckLng 2009-02-27 10:42:51
我用的是windows api的方法写异步网络通信程序,不是CSocket
服务器开启监听listen,
客户端此时connect,
服务器收到FD_ACCEPT,处理函数中accept客户端,立即发送约700字节信息.

问题来了:
客户端先发生FD_READ读到数据,然后发生FD_CONNECT.
我是在FD_CONNECT后判定连接成功与否,按上面的顺序不全乱了嘛?

有什么解决方法? 麻烦给我讲讲原理,详细点!谢谢.
...全文
220 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
D0ckLng 2009-02-28
  • 打赏
  • 举报
回复
感谢两位的继续跟进,真是感激不尽啊.
是的,肯定是我程序错误.
发帖是为了得到大家对对正确部分的肯定,对错误部分的否定,同时理清思路,
如此我自己才能更好解决问题.大段贴代码让别人改是最没前途的..

我验证了一下,按Delphigis 所说,确实是先connect,后read.
以下代码已改正,大家没有时间就不用费神了.
	switch(iEvent)
{
case FD_CONNECT:
if (iErrorCode == 0)
{
TRACE("FD_CONNECT");
m_ca.nState=CONNECTED;
//AfxMessageBox("连接成功");
}
else
{
AfxMessageBox("连接失败");
m_ca.nState=NOREADY;
}
break;
case FD_READ:
TRACE("FD_READ");
m_ca.OnCtrlReceive(CurSock);
...

原因出在"连接成功"那句写的过于前面,阻塞了.
prodiving 2009-02-27
  • 打赏
  • 举报
回复
肯定是你程序的问题, 肯定是先触发FD_CONNECT的消息的事件的,如果FD_CONNECT触发的状态是失败的,FD_READ是不会有的了。

你的代码肯定有问题
百事烟 2009-02-27
  • 打赏
  • 举报
回复
呵呵,怎么可能?暂时把别的代码注释掉,就下面2行试试?

fd_connect:
m_list.addstring("收到fd_connect"); //m_list控件把排序功能去掉
fd_read:
m_list.addstring("收到fd_read");

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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