CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

请问在网络编程中用recv来接收数据,怎么辨别接受完成呢?

楼主depotmen(嘻嘻哈哈)2002-05-07 22:03:10 在 VC/MFC / 网络编程 提问

我用  
  nRet   =   recv(Socket,   szBuffer,   sizeof(szBuffer),   0);  
  if   (nRect==0){..............}  
   
  来辨别,不过似乎不太准确,有时行,有时不行~~~  
  问题点数:20、回复次数:6Top

1 楼coffeefish(咖啡鱼)回复于 2002-05-07 22:08:54 得分 0

用異步方式來執行Top

2 楼xuying()回复于 2002-05-07 22:17:40 得分 20

TCP是流式的,对端发送来的数据可能需要调用多次recv才能接收完,因此需要自己定义格式,一般是一个结构,比如前n个字节定义长度,用某个特殊字节表示结束等方法来辨别数据是否发送完毕。Top

3 楼depotmen(嘻嘻哈哈)回复于 2002-05-07 22:26:44 得分 0

哦,也就是说没有固定的格式喽?如果自己编写发送端的话就自己定义格式,是这个意思吗?Top

4 楼limin(www.haha567.com)回复于 2002-05-07 22:55:56 得分 0

有个办法你可以试一下,首先我们提出一个假设,假设我们的缓冲区大小1024字节,如果一次接收完成,那么接收到的字节数,也就是recv的返回值肯定小于等于1024,但是如果一次没有接收完,那么接收到的字节数肯定等于1024。  
  如果这个假设成立了,那么就好办了。  
  1、接收,recv返回值为num  
  2、if   (num==SOCKET_ERROR)     表示没有接收的了,或者上次都接收完了  
        else  
                  if   (num==1024)   转1             表示刚好接收完,或者没有接收完  
                  else                                         不用说了,肯定接收完了Top

5 楼xuying()回复于 2002-05-07 23:02:16 得分 0

是的,发送端要自定义格式。Top

6 楼depotmen(嘻嘻哈哈)回复于 2002-05-07 23:05:13 得分 0

1、if   (num==SOCKET_ERROR)     表示没有接收的了,或者上次都接收完了  
  这条好象有点问题,我试了试,接受完了,num也不会等于SOCKET_ERROR,具体的代码如下:  
   
  nRet   =   send(Socket,   szBuffer,   strlen(szBuffer),   0);  
   
  if   (nRet   ==   SOCKET_ERROR)  
  {  
  PRINTERROR("send()");  
  closesocket(Socket);  
  return;  
  }  
       
   
  while(1)  
   
  {  
  nRet   =   recv(Socket,   szBuffer,   sizeof(szBuffer),   0);  
  if   (nRet   ==   SOCKET_ERROR)  
  {  
  cout   <<'nRet==SOCKET_ERRO';  
  break;  
  }  
   
                  cout   <<szBuffer;  
   
  }  
  closesocket(Socket);  
   
  WSACleanup();  
  }Top

7 楼depotmen(嘻嘻哈哈)回复于 2002-05-07 23:07:52 得分 0

只有SERVER端断开连接,client端才会num==SOCKET_ERRORTop

相关问题

  • 为什么winsock编程中接收缓冲区不会因为接收函数recv()的调用而更新?
  • SOCKET编程,接收数据不完整?
  • winsocket编程的receive与recv的疑问?
  • socket编程:recv(...)函数问题求救
  • socket编程中的recv问题
  • Java ServerSocket编程,我为什么接收不到数据?
  • TAPI编程:如何接收对方电话按键信息?
  • csoket编程时发送和接收不对应的问题
  • 向高手请教邮件接收编程问题。
  • UDP编程中的数据接收对象分析问题

关键词

  • 数据
  • socket
  • 接收
  • 辨别
  • recv
  • szbuffer
  • nret
  • 定义
  • 格式
  • 表示

得分解答快速导航

  • 帖主:depotmen
  • xuying

相关链接

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

广告也精彩

反馈

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