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

PrivateSubscktcpclient_dataArrival(ByValbytestotalAsLong)Dimstrmydata()AsByte'采用字节接受十... 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
展开
 我来答
RunnerChin
2011-07-19 · TA获得超过1833个赞
知道大有可为答主
回答量:1542
采纳率:100%
帮助的人:1545万
展开全部
直接用 bytestotal做for循环的终点,别用 strlen了
楼主的vbbyte位置没错,那个位置不是接收长度,而是接收类型。如果是2进制数据的话,得改用byte型,这里不用写,因为它默认就是 vbarray + vbbyte 型
更多追问追答
追问
用strlen = UBound(data),计算接收数据长度,为什么不对呢!
追答
你在 scktcpclient.GetData strmydata 后,debug一下 data,或者 lenb(data)。
你的数据长度程序已经帮你算好了,就是 bytestotal。光看字面意思也能够理解
刚才老眼昏花了,以为你用的是vbstring,这样写就没错,不过这里的vbbyte可以省略掉。
嘉文反病毒
2011-07-19 · 超过27用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:56.6万
展开全部
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 参数;是表示接收的类型!写不写关系不大!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式