vb连续sendData时出现的问题
最近我编了一个局域网发送文件的小程序
使用TCP协议
思路如下:
客户端要求发送,服务器端以byte形式读取文件,并开始发送第一个数据段(4K),客户端接到数据段,写入文件,然后发送一个nextB字符串,要求服务器端发送下一个数据段。
服务器端发现byte全部发送完毕,会发送一个‘the end’数据,这时文件发送完成了。
我编写好代码后,客户端能够接收到数据,可是接收到1M左右就不能继续接收下去了。
于是我通过调试发现,原来我的程序在发送"nextB"的时候,会连在一起发送。得到的结果就是"nextBnextB"。
通过查阅网上的资料得到下面的回答:
VB通过socket连续发送数据会有一个累积效应,累积到一定次数,会收到的出错的数据,其有一下规律。
- 曾经使用1200字节发送,大概累积发送8M数据就出错了。
- 每次发送的字节数越多,引发累积造成错误的次数也越小。
- 当我调到每次发送1000字节时,未再观察到出错。
有时候发送了2个用户包,而对方却收到了1个用户包,因为连续的senddata,在socket线程的一个检测周期就向socket的buf放了2批数据,当然他认为是1批啊,他会拆分成1500一个ip包(以太网的MTU,最大传送单元),在对方的socket线程里面,他在一个检测周期发现了数据于是做一个包触发一个事件给vb一个通知,不过这里面还多了个判断而已,就是如果这个包太大了