CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

为什么winsock编程中接收缓冲区不会因为接收函数recv()的调用而更新?

楼主GHenry()2000-09-02 16:14:00 在 VC/MFC / 基础类 提问

用如下代码接收,当对方发送一串字符,程序在循环过程中  
  将可以重复的收到该字符串,而且,当对方再发一新字符串  
  时,接收到的是两个字符串的总和,似乎是接收缓冲区一直  
  没有因为recv()函数的调用而更新  
  char   buf[1024];  
  int   rval,len;  
  do{  
  memset(buf,0,sizeof(buf));  
  if(rval=recv(msgsock,buf,1024,MSG_PEEK)>0)  
  TRACE("reading   stream   message");  
  if(rval==0)  
  TRACE("ending   connection\n");  
  else  
  TRACE("-->%s\n",buf);  
  send(msgsock,"OK",4,MSG_DONTROUTE);  
  }while(rval!=0);  
  问题点数:50、回复次数:5Top

1 楼yinyu(阴雨)回复于 2000-09-02 19:57:00 得分 50

recv函数的最后一个参数如果用MSG_PEEK表示“偷窥”数据,也就是取走数据但并不从系统接收缓冲去中删除,正常的调用该参数设为0即可Top

2 楼kirk(kirk)回复于 2000-09-03 10:37:00 得分 0

yinyu说得对!Top

3 楼sword_hero(sword)回复于 2000-09-04 06:46:00 得分 0

是的Top

4 楼killjapan05(ff)回复于 2000-09-04 08:17:00 得分 0

我也曾碰到这种情况!我记得recv()中,0就是MSG_PEEK;  
  我是把它设置为0,但若服务器连续发送send(),还会出现这情况。  
  我解决的方案就是在send()后加一个sleep(1);  
  不是方法的方法。我想这原因大概是windows消息响应太慢的原因吧!  
  你也是用异步socket吧!Top

5 楼a8e(坎坷的菜贩)回复于 2000-09-04 12:57:00 得分 0

错!查查相关头文件!MSG_PEEK   =   2!  
  recv最后一个参数应为0。  
  Top

相关问题

  • delphi中缓冲区A和缓冲区B相加,放入缓冲区C中,用哪个函数?
  • 函数调用
  • 函数调用
  • 调用函数
  • 函数调用
  • 函数调用
  • 函数调用?
  • 函数调用函数
  • 编写先入先出缓冲区的公共函数
  • 子函数调用?

关键词

  • 函数
  • 接收
  • 调用
  • recv
  • 字符串
  • rval
  • peek
  • 参数
  • buf
  • msg

得分解答快速导航

  • 帖主:GHenry
  • yinyu

相关链接

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

广告也精彩

反馈

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