CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

怎么FD_WRITE FD_READ一起触发了呢?

楼主flyingjm((我要找工作))2004-09-03 22:58:14 在 VC/MFC / 网络编程 提问

服务器端采用的是事件选择,当客户端向服务器端发送消息时,服务器端的FD_WRITE   FD_READ怎么一起触发了呢?  
  if(WSAEventSelect(sAccept,pRecvEvent,FD_WRITE|FD_READ|FD_CLOSE)==SOCKET_ERROR)  
  {  
                              break;  
  }  
  DWORD   dwWaitResult;  
  dwWaitResult   =   WSAWaitForMultipleEvents(1,   pRecvEvent,   FALSE,WSA_INFINITE,FALSE);  
  if   (dwWaitResult==WSA_WAIT_FAILED)  
  {  
  WSAEventSelect(sAccept,   pRecvEvent,   0);  
  CloseHandle(pRecvEvent);  
  return   -1;  
  }  
  dwWaitResult=dwWaitResult-WSA_WAIT_EVENT_0;  
  if(dwWaitResult==0)  
  {  
  closesocket(sAccept);  
   
  return   -1;  
  }  
  else   if(dwWaitResult==1)  
  {  
          WSANETWORKEVENTS   wNetworkEvents;  
          if(WSAEnumNetworkEvents(sAccept,pRecvEvent,&wNetworkEvents)   ==   SOCKET_ERROR)  
  {  
   
          WSAEventSelect(sAccept,   pRecvEvent,   0);  
          CloseHandle(pRecvEvent);  
          return   (SOCKET_ERROR);  
  }  
  if(wNetworkEvents.lNetworkEvents&FD_READ||wNetworkEvents.lNetworkEvents&FD_WRITE)  
  {  
                  if(wNetworkEvents.lNetworkEvents&FD_READ&&wNetworkEvents.iErrorCode[FD_READ_BIT]!=0)  
  {  
          WSAEventSelect(sAccept,pRecvEvent,   0);  
                            CloseHandle(pRecvEvent);  
          AfxMessageBox("FD_READ     error");  
          break;  
  }  
          else  
  {  
  AfxMessageBox("读事件");  
                                                                            int     nRet;  
                                                                            int   idx=0;  
  char   buffer[256];  
  nRet=recv(sAccept,buffer,256,0);  
                                                                          }  
                                  if(wNetworkEvents.lNetworkEvents&FD_WRITE&&wNetworkEvents.iErrorCode[FD_WRITE_BIT]!=0)  
  {  
          AfxMessageBox("FD_WRITE     error");  
          WSAEventSelect(sAccept,pRecvEvent[1],   0);  
                  CloseHandle(pRecvEvent);  
          AfxMessageBox("FD_WRITE     error");  
          break;  
  }  
              else  
  {  
  AfxMessageBox("写事件");  
                                                                              }  
                   
                  WSAResetEvent(pRecvEvent);  
  }  
  }  
  要关门了,没有时间修改了,大体的过程就是这样,服务器并没有像客户端发消息,不知道为什么显示了写事件也触发了??  
  问题点数:10、回复次数:5Top

1 楼stevecrisewu(月亮骑士)回复于 2004-09-04 09:18:33 得分 8

FD_WRITE在下面四种情况发生  
  1。When   WSAAsyncSelect   called,   if   a   send   or   sendto   is   possible.    
  2。After   connect   or   accept   called,   when   connection   established.    
  3。After   send   or   sendto   fail   with   WSAEWOULDBLOCK,   when   send   or   sendto   are   likely   to   succeed.    
  4。After   bind   on   a   connectionless   socket.   FD_WRITE   may   or   may   not   occur   at   this   time   (implementation-dependent).   In   any   case,   a   connectionless   socket   is   always   writeable   immediately   after   a   bind   operation.    
   
  从你的描述中,可能是这种情况:  
  你的客户连接进来后立刻发送消息给服务器,因此,你调试跟踪时候发现FD_WRITE和FD_READ好像同时发生了,其实不然。客户连接进来时候也触发了FD_WRITE事件。Top

2 楼flyingjm((我要找工作))回复于 2004-09-04 09:46:47 得分 0

好像是啊,因为刚连接近来的时候,我没有发送消息也就触发了这两个事件了?Top

3 楼flyingjm((我要找工作))回复于 2004-09-04 09:47:18 得分 0

有这方面的例子吗?  
  感觉看书看的也没有什么效果Top

4 楼hellopine()回复于 2004-09-04 15:10:48 得分 2

用API函数比较好  
  我一直用Top

5 楼flyingjm((我要找工作))回复于 2004-09-05 20:15:20 得分 0

楼上的能给各例子吗〉?Top

相关问题

  • 用WSAAsyncSelect模型的时候什么时机触发FD_WRITE?
  • 触发器?!
  • 触发问题!
  • 触发器
  • 触发器
  • 求触发器
  • 触发器
  • 触发器(ORACLE)!!!!!!!!!
  • 触发器(ORACLE)!!!!!!!!!
  • MSN触发

关键词

  • 服务器
  • 客户
  • 连接
  • 消息
  • socket
  • precvevent
  • wnetworkevents
  • saccept
  • dwwaitresult
  • fd

得分解答快速导航

  • 帖主:flyingjm
  • stevecrisewu
  • hellopine

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo