社区
网络编程
帖子详情
关于Recv接收数据的数据量
godfly000
2005-05-18 07:18:35
我在另一台机子上用send函数一次发送了11200byte的数据,为什么主机用recv函数一次只接收了0x002238个byte,约为8160或更少,很奇怪。如果只发送5600或较少的数据,是可以正确接受的。我用的是WSAnySelect函数注册的wnd消息FD_READ,而且好像毎次连续收到两次读数据的消息,send内部是分批发送的吗?哪位高手指教一下,万分感谢!!!
...全文
338
20
打赏
收藏
关于Recv接收数据的数据量
我在另一台机子上用send函数一次发送了11200byte的数据,为什么主机用recv函数一次只接收了0x002238个byte,约为8160或更少,很奇怪。如果只发送5600或较少的数据,是可以正确接受的。我用的是WSAnySelect函数注册的wnd消息FD_READ,而且好像毎次连续收到两次读数据的消息,send内部是分批发送的吗?哪位高手指教一下,万分感谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
godfly000
2005-05-22
打赏
举报
回复
经过不懈努力和大家的帮助基本解决了问题,揭帖!
godfly000
2005-05-20
打赏
举报
回复
我的是适时系统,还有其他处理、显示线程,为了提高效率,我传送的数据没有设置边界,只根据读到的数据大小判断是否正确。循环接受,好像会死机,即接受不到那么多数据,我是消息触发接受的,有关系吗?
godfly000
2005-05-20
打赏
举报
回复
我每次发送的也就是11200byte,setsockopt我调用了两次,一次设置缓冲大小,一次让其立即发送(TCP_NODELAY),应该不会粘包吧,而且40s后,接收是正确地。而且记录是45~~~48ms收到一次数据,与发送时间是一致的。就是前面40s不稳定,时间数据都不对,可能是分批发送的,不知道什么原因,能解决吗?
godfly000
2005-05-20
打赏
举报
回复
现在的问题是得到一次读数据消息,即使循环接受也得不到全部数据,而且是刚开始传输时得不到,一分中后会稳定
smzh8
2005-05-20
打赏
举报
回复
这好像是系统限制的发送包大小。限制在一次发送数据包8K左右。
zhengstar
2005-05-20
打赏
举报
回复
微软得tcp协议得接收缓冲区最大默认是8192个字节,在加上TCP协议头,所以你每次recv最到也就接收
8千多个字节,甚至更少
younggle
2005-05-20
打赏
举报
回复
AntonlioX() 说得对,要循环的接受,知道你发送的数据大小与接受到的数据大小相等再处理,不然就会粘包或者掉包,处理就会出错了。
nuaawenlin
2005-05-20
打赏
举报
回复
又关系,如果触发消息之后,由于处理的原因,没有recv的话
那么以后的消息就被阻塞了
MuseIn
2005-05-19
打赏
举报
回复
应该是发送的时间间隔的问题
AntonlioX
2005-05-19
打赏
举报
回复
需要循环调用Receive的 知道你实际接收的字节数== 你本来打算接收的字节数
AntonlioX
2005-05-19
打赏
举报
回复
给你一段代码你就明白了
BOOL MyReceiveData(CSocket *psocket,char *data,DWORD len)
{
DWORD left,idx,ret;
left=len;
idx=0;
while(left>0)
{
ret = psocket->Receive(&data[idx],left,0 );
if( ret == SOCKET_ERROR)
{
return FALSE;
}
left-=ret;
idx+=ret;
}
return (idx==len)?TRUE:FALSE;
}
AntonlioX
2005-05-19
打赏
举报
回复
up
xift_2008
2005-05-19
打赏
举报
回复
我想网络数据包每次发送的小一点应该比较稳定吧
经验值是1500字节吧,包与包之间的时隙也是影响
数据发送稳定性的因素。
redchina
2005-05-19
打赏
举报
回复
tcp一般保证的是可靠的位流传输,如果你传输的是结构数据,也就是说带有消息边界。应该使用setsockopt()使得tcp层立即发送数据,这样在稍微长一点的时间内(比如500ms单位)内发送一次数据就可以保证你接受方接受到的是结构化的数据,如果你本身发送程序间隔很短,比如1ms,这样就会出现粘包。在接受端接受到的仍然不会是结构化的数据,这就需要你解包。~~~~
godfly000
2005-05-19
打赏
举报
回复
我接受数据是用网络事件触发的,知道每次有数据的间隔时间,如前所说,一段时间后才会稳定,间隔短的时间我就不接受
godfly000
2005-05-19
打赏
举报
回复
TCP的窗口是什么意思,不好意思,刚学不太懂,能不能说明白一点?
Wenxy1
2005-05-19
打赏
举报
回复
是不是TCP的窗口设置小了些?
godfly000
2005-05-19
打赏
举报
回复
我用setsockopt函数重新设置了缓冲大小基本上好了,但是不知道为什么开始的时候仍然接受不到那么多数据,大概40s以后才能接受到设定大小的数据,客户机45ms发送一次数据。服务器前面大概40s,一般是45ms,0.07ms间隔出现,数据也必应该得到的少。哪位高手指点一下吧!
nuaawenlin
2005-05-19
打赏
举报
回复
没有大小限制,
tcp的发送是有一些规则的
看tcp/ip详解吧
godfly000
2005-05-18
打赏
举报
回复
哪位帮帮忙呀?急!是数据流(stream)传送,有大小限制吗?
TCP通信,
recv
接收数据
需要注意的地方?
关于TCP通信中,
recv
函数
接收数据
大小的问题,之前一直觉得,只要是客户端与服务器一发一收的模式,那么
recv
接收的数据大小一定是函数中指定的数据大小。这次写了客户端与服务器通信的程序,在这上面栽了一个大跟斗...
recv
函数
接收数据
问题(诡异)--调试正确,全速出错
今天,测试代码时,发现使用
recv
函数
接收数据
时,当全速运行时,出现
接收数据
不全问题,当调试运行的时候,一切正常。调整
接收数据
缓冲大小,发现太小时,重复接收过程会出现数据交叉问题。 一切都显的那么诡异,...
大量数据的tcp的
recv
大量数据的tcp的
recv
最近在调程序的时候,发现发送端发送一个119136个char的内存的时候,在接收端不能全部接收, 于是,通过调试发现,必须在接收端多次的
recv
以后,进行拼接: 代码如下: char...
linux的tcp通讯
recv
()函数接收大数据分包问题
误区在于先一直认为这个函数在接收len长度的时候,如果不足len,则返回实际接收长度,如果缓冲区没有数据,则返回-1,其实
recv
函数默认是阻塞模式,在阻塞模式下,如果缓冲区没有数据则会一直阻塞;如果将socket设置...
linux tcp阻塞socket
recv
接收数据
未达到指定长度返回问题
一直以为在阻塞的tcp socket上使用read/
recv
读取的数据长度一定和指定的读取长度一致,但是实际测试时发现往往返回的长度都比指定长度短,查找资料发现其实是一直误解了这个函数。 引用《UNIX网络编程 卷一 套接字...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章