我的源码如下,请大神帮忙看看中间红色部分该如何处理取完整数据
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim S, S3, s1, flag, flag1 As String
Dim id, strlen As Integer
Dim tmp As String
Dim str() As Byte
Winsock1.getData str()
strdata = StrConv(str(), vbUnicode) '转换为字符串,
flag = Left(strdata, 2)
'log.Text = log.Text & Format(Hour(Time), "00") & ":" & Format(Minute(Time), "00") & ":" & Format(Second(Time), "00") & " " & strdata '显示日志
'log.SelStart = Len(log.Text)
Select Case flag
Case "E1" '登录
Sleep 200
Login '登录
log.Text = log.Text & Format(Hour(Time), "00") & ":" & Format(Minute(Time), "00") & ":" & Format(Second(Time), "00") & " " & "admin" & vbCrLf '显示日志
Case "E0"
u = u + 1
log.Text = log.Text & Format(Hour(Time), "00") & ":" & Format(Minute(Time), "00") & ":" & Format(Second(Time), "00") & " " & strdata '显示日志
log.SelStart = Len(log.Text)
If u = 1 Then
' Sleep 500
log.Text = log.Text & Format(Hour(Time), "00") & ":" & Format(Minute(Time), "00") & ":" & Format(Second(Time), "00") & " " & "登录成功" & vbCrLf '显示日志
state_lab = "TCP/IP Connect OK" '登录成功
log.SelStart = Len(log.Text)
End If
Case "EA" '温度值返回
S = strdata
log.Text = log.Text '不显示日志
log.SelStart = Len(log.Text)
S3 = Split(S, "^C", , vbTextCompare)
For j = 1 To UBound(S3)
s1 = Split(S3(j), vbCrLf)(0)
s1 = Trim(s1)
If Format(s1) > Val(Form4.CH(j - 1)) Then
Form4.CH(j - 1) = Format(s1, "00.0")
End If
Next j
Case "EB" '二进制数据返回,
tmp = StrConv(str(), vbUnicode)
id = str(9) '取ID ,测试ok
strlen = HEX_to_DEC(Hex(str(4)) & Hex(str(5)) & Hex(str(6)) & Hex(str(7))) '取数据长度,测试OK
在此位置该如何处理才能先接收全部的数据??
数据格式和使用Wireshark抓包的数据截图如下图
If id = 19 Then '如果ID为19,则为设定信息输出
此处为对接收的数据进行处理,同上面温度值取出
End If
End Select
[
本帖最后由 hcyang1422 于 2015-4-23 12:48 编辑 ]