关于vb6的winsock控件一次性传递数据大小的问题。

我用vb6的winsock控件编写一段数据传送的代码,假如一次要发送10K的数据,但vb6有时总是自作主张的按每次1460字节的大小发送若干次,直至发完10K的数据,而这... 我用vb6的winsock控件编写一段数据传送的代码,假如一次要发送10K的数据,但vb6有时总是自作主张的按每次1460字节的大小发送若干次,直至发完10K的数据,而这钟情况不是每次都出现,请问是什么原因呢? 展开
 我来答
56...7@qq.com
2008-11-02 · TA获得超过883个赞
知道小有建树答主
回答量:533
采纳率:0%
帮助的人:640万
展开全部
Winsock 主要是以TCP或UDP传输数据的,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,传输层,应用层.UDP属于运输层。

下面由下至上一步一步来看:

以太网 (Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元).但这并不是指链路层的长度被限制在1500字节,其实这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节.所以,事实上,这个1500字节就是网络层IP数据报的长度限制.因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节.而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的.又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节.这个1472字节就是我们可以使用的字节数。

当我们发送的UDP数据大于1472的时候会怎样呢?这也就是说IP数据报大于1500字节,大于 MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报。

另外,数据限制也存在两个因素:

第一,应用程序可能会受到其程序接口的限制。socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。对于UDP socket,这个长度与应用程序可以读写的最大UDP数据报的长度直接相关。现在的大部分系统都默认提供了可读写大于8192字节的UDP数据报(使用这个默认值是因为8192是NFS读写用户数据数的默认值)。

第二个限制来自于TCP/IP的内核实现。可能存在一些实现特性(或差错),使IP数据报长度小于65535字节。
百度网友32cdd9945
2008-11-02 · TA获得超过1374个赞
知道大有可为答主
回答量:2429
采纳率:100%
帮助的人:1940万
展开全部
系统规定的网络包的大小,没办法的。
也可能和网卡等硬件有关。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tonkeys
2008-11-02 · TA获得超过1513个赞
知道大有可为答主
回答量:2087
采纳率:33%
帮助的人:2445万
展开全部
这个取决于网络缓冲区的设置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式