您的位置:程序门 -> vb -> 网络编程



vb利用winsock编程传数据时,为什么有时收到的数据与发送的数据块大小不一致?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vb利用winsock编程传数据时,为什么有时收到的数据与发送的数据块大小不一致?[已结贴,结贴人:linton]
发表于:2008-01-28 14:00:59 楼主
传送一个400多kb的文件,将文件分成4kb或2kb的数据块体,然后利用winsock控件的senddata将各块体发送出去,但在客户端接收到的数据块体大小有时候与发送的块体大小不一致,如块体是4kb发送时,出现不一致的情况时接收到的数据块体却是1414(字节),或者比4kb要大。请问这种情况怎么解决?附加:采用的是tcp协议。
发表于:2008-01-29 14:56:381楼 得分:0
怎么没人回答阿?
发表于:2008-01-30 14:30:112楼 得分:12
可以不分段发送的,分段接收就可以了,另外接收时建议创建一个新的winsock控件来接收,接收完毕时卸载销毁…………
发表于:2008-01-30 14:34:273楼 得分:12
p.s:接收分段其实也是winsock自动分的,不用你自己设定,你问题中说接收到1414b可能只是数据的其中一段,
如果比4k大就有可能是上次发送的数据这次一起接收所致,又或者是你在接收数据的语句里面有doevents,
造成数据重复接收…………
以上都是个人经验,仅供参考:)
发表于:2008-01-30 14:40:294楼 得分:2
看丢了哪些数据,或者数据还没有接收完成啊
发表于:2008-01-30 15:08:395楼 得分:2
senddata   发的太快,连续多次调用中间须用一下延时
发表于:2008-02-07 13:10:176楼 得分:12
接收块不一致是因为网络的原因造成的,你可以不理会
你要做的事情就是把所有的数据按顺序写紧磁盘上就可以了
另外,tcp是不会丢包的,所有的数据都是按顺序接收
发表于:2008-02-19 17:01:107楼 得分:0
通过尝试,发现tcp确实不会丢包。采用两个winsock可实现,一个用于接收命令,另一个用于接收数据,这样接收到的数据只需每次累加,到数据包大小后即是数据接收完成。问题算是解决了,谢谢诸位。


快速检索

最新资讯
热门点击