TCP为什么接收到的数据大于发送的数据长度?

runezhang 2012-01-07 10:10:01
发送端发送500*1024字节的数据,在运行了几个小时都是正常的,突然发现一次接收到的数据是538656
下面是我的发送和接收代码,请各位大侠帮忙分析下。看看有无错误

//发送
while(1)
{

sleep(200);
int i=send(m_SockClient,pvar,500*1024,0);
if(i == SOCKET_ERROR)
{
CString error;
error.Format("error : %d",WSAGetLastError());
AfxMessageBox(error);
}

}

//接收
while(1)
{
int num = 0;
while(num < 500*1024)
{
int ret = recv(m_SockClient,pRecvBuf + num ,500*1024,0);
if(ret>=0)
num += ret;
else
{
CString error;
error.Format("socket error : %d",WSAGetLastError());
AfxMessageBox(error);
}
}


//在这里加日志记录num 在运行了几个小时候,发现接收到的数据大于发送的数据num = 538656
}
...全文
379 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
96掌门师兄 2012-01-07
  • 打赏
  • 举报
回复
求知晓..
runezhang 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zfive5 的回复:]
增加一个写日志文件的功能,看一下问题出在哪里?有可能是杀毒软件干的,
[/Quote]

我补充一点:
我的发送程序在一台电脑,接收程序在另一台电脑。
发送端有360,接收端没有杀毒软件
醉马不肖 2012-01-07
  • 打赏
  • 举报
回复
增加一个写日志文件的功能,看一下问题出在哪里?有可能是杀毒软件干的,
小布 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 visualeleven 的回复:]

这个不奇怪吧,TCP是流协议,多次send的数据可能一次到接收端,recv一次就接收尽可能多的数据。
send和recv并不是一一对应的,可能send多次,recv一次。
[/Quote]
对,SOCK_STREAM是流式的,建议楼主看看底层代码,TCP有自己的数据校验,保证的是你的数据顺序到达,但是未必是按你的大小来到达.
Eleven 2012-01-07
  • 打赏
  • 举报
回复 1
这个不奇怪吧,TCP是流协议,多次send的数据可能一次到接收端,recv一次就接收尽可能多的数据。
send和recv并不是一一对应的,可能send多次,recv一次。
明天去抢劫 2012-01-07
  • 打赏
  • 举报
回复
int ret = recv(m_SockClient,pRecvBuf + num ,500*1024,0);
改成
int ret = recv(m_SockClient,pRecvBuf + num ,500*1024 - num,0);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧