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

我的CSocket客户端怎么只能响应一次OnReceive事件????

楼主toxyboy(不专业,我就顶,绝不误导别人!!)2004-09-03 11:39:51 在 VC/MFC / 网络编程 提问

客户端接收代码  
  如下void   CClientSocket::OnReceive(int   nErrorCode)    
  {  
  //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class  
  m_pDlg->OnReceive();  
  CAsyncSocket::OnReceive(nErrorCode);  
  }  
  VOID   CFtpClientDlg::OnReceive()  
  {  
  char   strTemp[128]="\0";  
  if(m_pClientSocket->Receive(strTemp,128)   ==   SOCKET_ERROR)  
  {  
  return   ;  
  }  
  //   here   begin   send   file  
  if(memcmp(strTemp,strReturn,strlen(strReturn))   ==   0)  
  {  
  FILE   *fp   =   fopen((char*)(LPCTSTR)m_strFilePath,"r+b");  
  if(!fp)  
  {  
  CloseSocket(m_pClientSocket);  
  return   ;  
  }  
  BYTE   *pByte   =   new   BYTE[MAX_LENGTH];  
  long   lRead=0;  
  long   lsend   =   0;  
  while(!feof(fp))  
  {  
  lRead   =   fread(pByte,1,MAX_LENGTH,fp);  
  if(((lsend   =   m_pClientSocket->Send(pByte,lRead))   ==   SOCKET_ERROR)   ||(lsend   !=   lRead))  
  }  
  fclose(fp);  
  if(pByte)  
  {  
  delete[]   pByte;  
  pByte   =   NULL;  
  }  
  }else //   send   succeed!  
  {  
  m_pClientSocket->Receive(strTemp,0);  
  if(memcpy(strTemp,strAffirm,strlen(strAffirm))   ==   0)  
  {  
  AfxMessageBox("Client   OK!");  
  CloseSocket(m_pClientSocket);  
  }  
  }  
  }  
  客户端的工作步骤为:发送文件名和大小,等待服务段确认然后发送数据,一旦服务器接收完毕发送一个strAffirm同一内容的确认传输完毕的确认消息,然后结束本次传输。但是,调试发现,客户端的OnReceive事件只响应一次。即服务端第二次发送文件传输完毕的确认消息,客户端就不响应了,那位大侠说说什么原因阿? 问题点数:60、回复次数:5Top

1 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:45:11 得分 0

噢。贴错了。代码作个改动  
  else //   send   succeed!  
  {  
                                        //m_pClientSocket->Receive(strTemp,0);   这里不在接收  
  if(memcpy(strTemp,strAffirm,strlen(strAffirm))   ==   0)  
  {  
  AfxMessageBox("Client   OK!");  
  CloseSocket(m_pClientSocket);  
  }  
  }  
  Top

2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-03 11:47:24 得分 60

CloseSocket(m_pClientSocket);  
  ?Top

3 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:47:38 得分 0

也就是说上面if(memcpy(strTemp,strAffirm,strlen(strAffirm))   ==   0)这句永远都进不来。  
  Top

4 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:49:43 得分 0

inline   void   CFtpClientDlg::CloseSocket(CClientSocket   *pTemp)  
  {  
  pTemp->Close();  
  delete   pTemp;  
  pTemp   =   NULL;  
  GetDlgItem(IDCONNECT)->EnableWindow(TRUE);  
  }Top

5 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:51:02 得分 0

DentistryDoctor(牙科医生)     兄,看出什么问题了吗???请明示!!Top

相关问题

  • CSocket类中如何响应OnAccept OnReceive事件?
  • CSocket::OnReceive()为什么只响应了一次?
  • CCeSocket或CSocket或CAsyncSocket 在wince3.0 下如何实现自动响应OnReceive()
  • CSocket中OnReceive()
  • 关于服务器端响应和客户端响应
  • CSocket::OnReceive怎么用?
  • CSocket的OnReceive问题
  • 为什么客户端响应速度慢?
  • 如何在非客户区响应鼠标消息?
  • domino server 为何不响应客户端请求? 急急急

关键词

  • 客户
  • pclientsocket
  • straffirm
  • onreceive
  • strtemp
  • pbyte
  • 响应
  • lread
  • lsend
  • ptemp

得分解答快速导航

  • 帖主:toxyboy
  • DentistryDoctor

相关链接

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

广告也精彩

反馈

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