VB的Winsock控件,为什么不能接收完所有数据呢?明明发送了56个字节的数据,可只接收了6个字节?拜求高手

Private Sub scktcpclient_dataArrival(ByVal bytestotal As Long)
Dim strmydata() As Byte '采用字节接受十六进制数据
Dim strlen As Long '定义字符串长度
Dim i As Long

scktcpclient.GetData strmydata, vbByte
strlen = UBound(data)
For i = 0 To strlen
Text1.Text = Text1.Text & " " & Hex(data(i)) & "H"
Next i
Text3 = bytestotal
End Sub

运行结果:
Text1显示: ECH 3H 8H 0H 0H 34H
Text3显示:56

直接用 bytestotal做for循环的终点,别用 strlen了
楼主的vbbyte位置没错,那个位置不是接收长度,而是接收类型。如果是2进制数据的话,得改用byte型,这里不用写,因为它默认就是 vbarray + vbbyte 型追问

用strlen = UBound(data),计算接收数据长度,为什么不对呢!

追答

你在 scktcpclient.GetData strmydata 后,debug一下 data,或者 lenb(data)。
你的数据长度程序已经帮你算好了,就是 bytestotal。光看字面意思也能够理解
刚才老眼昏花了,以为你用的是vbstring,这样写就没错,不过这里的vbbyte可以省略掉。

追问

你们都回答错误!

追答

你照做就是了,在 scktcpclient.GetData strmydata 后,debug一下 data,或者 lenb(data)。

追问

我的那个代码本事没有错误。错误的原因是:我接收使用strmydata变量,而喔求数组个数用的是UBound(data)。这是我错误的原因!不过,分我还是给你!你也算是热心人!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-19
Private Sub scktcpclient_dataArrival(ByVal bytestotal As Long)
Dim data() As Byte '采用字节接受十六进制数据
Dim i As Long
scktcpclient.GetData data
For i = 0 To UBound(data)
Text1.Text = Text1.Text & " " & Hex(data(i)) & "H"
Next i
Text3 = bytestotal
End Sub追问

你说这个这个我试过,不行!scktcpclient.GetData 参数;是表示接收的类型!写不写关系不大!

相似回答