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

接收端接收到了所有的包,但前面几个数据是对的,后面的不对,这是为什么?(通过TCP传输大数据时)

楼主zoutaiqi(David)2002-11-21 14:33:43 在 VC/MFC / 网络编程 提问

通过TCP传输大数据时:接收端接收到了所有的包,但前面几个数据是对的,后面的不对,都为零,这是为什么?  
   
  (发送端显示数据是一次就发完了(数据大小:360054字节);即FileLength=360054;  
  接收端分了很多次接收,但都接收到了.)  
   
   
  我是采用异步I/O的方式:  
  (1)发送端:  
                    ....  
                int   nLeft;  
                nLeft   =   FileLength;//将要发送的BMP数据的长度.  
                int   idx;  
                idx   =   0;  
                while   (nLeft   >   0)  
                {  
                      //SendFileInf[SendFileIndex].pFileMemoryAddr为将要发送的数据缓冲区地址  
                      ret   =   send(SendDataSock,   SendFileInf[SendFileIndex].pFileMemoryAddr       +   idx,   nLeft,   0);  
                      if   (ret   ==   SOCKET_ERROR)  
                        {    
                              AfxMessageBox("Send()   BMP   Data   Error!");  
                              break;  
                          }  
                      nLeft   -=   ret;  
                      idx   +=   ret;  
                      TRACE("ret   is   %d\n",   ret);  
    TRACE("idx   is   %d\n",   idx);  
  }  
  ....  
  (2)接收端:  
  case   FD_READ:  
                //m_SendProc[nIndex][0].SendID为接收端套接字,pbuff为缓冲区  
                ret   =   recv(m_SendProc[nIndex][0].SendID,   pbuff,   1024,   0);//接收数据  
                 
              //   m_SendProc[nIndex][FileNo].pFileMemoryAddr为接收数据缓冲区.  
            //m_SendProc[nIndex][FileNo].CurRecvFileLen为每次接收到的数据的累积长度.  
                memcpy(m_SendProc[nIndex][FileNo].pFileMemoryAddr   +   m_SendProc[nIndex][FileNo].CurRecvFileLen,   pbuff,   ret);  
                m_SendProc[nIndex][FileNo].CurRecvFileLen   +=   ret;  
                //调试时显示接收到的包的长度.  
                TRACE("m_SendProc[nIndex][FileNo].CurRecvFileLen   is   %d",   m_SendProc[nIndex][FileNo].CurRecvFileLen);  
              //清空缓冲区  
              ZeroMemory(pbuff,   1024);  
                 
                break;  
  问题点数:100、回复次数:2Top

1 楼xingchen_ak(星辰)回复于 2002-11-21 15:17:45 得分 100

tcp协议的send()只是将数据放入缓冲区,立刻返回  
  如果一次发送数据量太大,会缓冲区溢出Top

2 楼zoutaiqi(David)回复于 2002-11-26 12:26:00 得分 0

我知道了,是我的程序中的问题Top

相关问题

  • 求tcp服务器端接收代码 或简要介绍方法,up有分,不胜感激
  • socket客户端接收数据问题
  • ●●● TCP: 服务器端等时间间隔发数据,客户端接收数据时间间隔不一致,怎么办?
  • 如何在服务器端接收文件上载?
  • 通过TCP传输大数据时,为什么最后一个包接收端收不到?
  • TCP IP的接收
  • Socket通讯,服务器端接收到Java发来的数据后诸塞
  • 如何写客户端接收信息的函数??<100分请教>
  • asp.net如何在服务器端接收用xmlhttp传递过去的xml对象!
  • asp.net如何在服务器端接收用xmlhttp传递过去的xml对象!

关键词

  • 数据
  • 接收
  • sendproc
  • pfilememoryaddr
  • nleft
  • idx
  • 缓冲区
  • ret
  • nindex
  • 发送

得分解答快速导航

  • 帖主:zoutaiqi
  • xingchen_ak

相关链接

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

广告也精彩

反馈

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