收到数据: Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim sda() As Byte Winsock1.GetData sda End Sub 把数据传递给sendG Private Sub sendG(sda() As Byte) Dim i As Integer, l As Long CopyMemory i, sda(UBound(sda) - 1), 2 Print Hex(i) If i = &HAA55 And hcun = 0 Then sendC sda Else l = hcun + UBound(sda) + 1 ReDim Preserve s1(l - 1) CopyMemory s1(hcun), sda(0), UBound(sda) + 1 If i = &HAA55 Then sendC s1 hcun = 0 Else hcun = l End If End If End Sub 因为完整的数据都是以AA55结尾,所以先判断结尾是不是AA55,如果不是就把数据累加到字节组s1,直到收到的数据结尾是AA55时,把数据传给sendC。代码应该没有出错,不大于1024的数据包全都通过了。只是大于1024的封包,根本没有收到后面的数据。也就是sendG得不到,所以没有处理动作。
有人说用PeekData 收的数据比较全,就是不能清空缓冲区。所以先用PeekData ,然后再用GetData 既然这样,先把全的数据取到sda,然后用GetData 再取一次,因为可能不完整,所以不应该再取到sda了对吧。我用GetData 取到另一个变量,测试结果还不行。我就把GetData也取到变量sda,重复之后竟然可以了。不知道什么原因 Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim sda() As Byte Winsock1.PeekData sda Winsock1.GetData sda End Sub 其实是服务端故意把这个包给拆开了,因为我中间有收到数据是7K多,是一个包。所以证明VB6的winsock控件,默认缓冲区不是1024.拆开的包应该是分两次收到。可实际情况可能不是这样。
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sda() As Byte
Winsock1.GetData sda
End Sub
把数据传递给sendG
Private Sub sendG(sda() As Byte)
Dim i As Integer, l As Long
CopyMemory i, sda(UBound(sda) - 1), 2
Print Hex(i)
If i = &HAA55 And hcun = 0 Then
sendC sda
Else
l = hcun + UBound(sda) + 1
ReDim Preserve s1(l - 1)
CopyMemory s1(hcun), sda(0), UBound(sda) + 1
If i = &HAA55 Then
sendC s1
hcun = 0
Else
hcun = l
End If
End If
End Sub
因为完整的数据都是以AA55结尾,所以先判断结尾是不是AA55,如果不是就把数据累加到字节组s1,直到收到的数据结尾是AA55时,把数据传给sendC。代码应该没有出错,不大于1024的数据包全都通过了。只是大于1024的封包,根本没有收到后面的数据。也就是sendG得不到,所以没有处理动作。
既然这样,先把全的数据取到sda,然后用GetData 再取一次,因为可能不完整,所以不应该再取到sda了对吧。我用GetData 取到另一个变量,测试结果还不行。我就把GetData也取到变量sda,重复之后竟然可以了。不知道什么原因
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sda() As Byte
Winsock1.PeekData sda
Winsock1.GetData sda
End Sub
其实是服务端故意把这个包给拆开了,因为我中间有收到数据是7K多,是一个包。所以证明VB6的winsock控件,默认缓冲区不是1024.拆开的包应该是分两次收到。可实际情况可能不是这样。
不管用什么办法,都取不到完整那个数据包,而且我测试时,收到的包有10K以上的,也觉得奇怪啊
有人说winsocket默认缓冲区是8K。看来这个问题不是数据包长度的问题,
既然这么长的包都能收到,可问题是那一个包,是服务端分两“段”发送,我程序只能收到前面部分。
但用WPE抓包却能看到后面那部分。真是百思不得其解。