socket发送数据长度的问题?菜鸟求助!

dd_dzs 2005-04-05 09:10:07
使用的流模式套接字,WinCE是服务端,WinXp是客户端。当服务端发送的一桢报文超过1460字节时,在客户端经常是分成多桢接收,请问为什么客户端不能一次接受完呢?
...全文
121 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
herman-chen 2005-04-08
tcp/ip协议:就是传输线路的MTU(最大传输单元)问题
回复
baoyuhua 2005-04-05
无论在应用层上采用什么技术,协议栈本身所采取的动作不会被改变,通常在非阻塞模式下,当协议栈缓冲区写满后数据就会被随后发送,但是否一次将缓冲区中的数据全部发送仍然取决于很多因素,这与协议栈本身采用的算法有关。
回复
baoyuhua 2005-04-05
当然,为了防止网络中突然出现的大量数据,协议栈本身采用了一些算法避免网络拥塞,通常在有数据传送时,首先发送一个较小的数据包,然后再逐步增加,直到网络达到一个稳定的状态,这样就可以保证连接不会被激增的数据拥塞。所以协议栈本身以此发送的数据量取决于自身的算法,这跟当时的网络状态也会具有相关性。
回复
genghb 2005-04-05
tcp底层实现,客户端应该自己处理多桢的情况,比如在之前先发送数据长度,数据全部接收后再进行后续处理
回复
baoyuhua 2005-04-05
我想这应该取决于wince底层的协议栈实现
回复
husthunter 2005-04-05
与传输线路的MTU有关
回复
dd_dzs 2005-04-05
我是刚学着使用socket,对很多东西还不太明白。当我们把桢长降到小于1460(以太网下最有效率的桢长)时,就不会有同样的事情发生。测试过Xp下的接收缓存是8K,Ce下的发送缓存没测,下午试试看是不是小于1460。
回复
相关推荐
发帖
通信技术
创建于2007-08-27

4061

社区成员

通信技术相关讨论
申请成为版主
帖子事件
创建了帖子
2005-04-05 09:10
社区公告
暂无公告