我用winsock的senddata发送一个结构体:Public Type tPack
eCMD As eCommand
iDisTime As Date '8
iConTime As Date '8
iStep As Long '4
lTotalLength As Long '4
lSendLength As Long '4
iID As Long '4
bFilepack(4095) As Byte
End Type
dim temp as tPack
发送代码:
CopyMemory gdata(0), temp, iType
Sock.SendData gdata
在客户机上接收数据,大多数情况,一次DATAARRIVAL过程可以正常接收4132个字节,但是有较高的概率出现先接收到第一个包2920字节,再接收到包1212个字节。
请指教如下问题:
1.这种偶然分包情况是什么原因导致?
2.如何避免这个情况
3.是否有更佳替代方案?
eCMD As eCommand
iDisTime As Date '8
iConTime As Date '8
iStep As Long '4
lTotalLength As Long '4
lSendLength As Long '4
iID As Long '4
bFilepack(4095) As Byte
End Type
dim temp as tPack
发送代码:
CopyMemory gdata(0), temp, iType
Sock.SendData gdata
在客户机上接收数据,大多数情况,一次DATAARRIVAL过程可以正常接收4132个字节,但是有较高的概率出现先接收到第一个包2920字节,再接收到包1212个字节。
请指教如下问题:
1.这种偶然分包情况是什么原因导致?
2.如何避免这个情况
3.是否有更佳替代方案?
如果想修改缓冲区,则可以使用API来代替控件,网上有许多关于winsock的API以及关于修改缓冲区的大小的代码,你GOOGLE一下就可以了。
4k只是你的缓冲区,真正分包的个数由你的网络决定
如果网络不好,4k被分成10个包都有可能,因为vb的winsock实现是每recv一次就触发一次data_arrival事件的