首页 /编程语言和算法/VB6/VBA/ASP
 VB6 Winsock输出二进制数组内容到立即窗口,子程序 s_PrintToDebug(lngArrByteStart&, lngArrByteEnd&, bData() As Byte)
2025年6月16日 00:38
Private Sub Winsock1_DataArrival(ByVal bytesTotal&)
    Dim bData() As Byte
    ReDim bData(bytesTotal - 1)
        
    Call s_PrintToDebug(0, UBound(bData), bData)
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal&)
    Dim bData() As Byte
    ReDim bData(100)
    
    Winsock2.GetData bData    '这里不管是多少,都会自动变成合适的大小,就算上方写的100,也会变成真实大小。
    Call s_PrintToDebug(0, UBound(bData), bData)
End Sub    

Private Sub Winsock3_DataArrival(ByVal bytesTotal&)
End Sub   

Private Sub Command1_Click()
    Dim bData() As Byte
    ReDim bData(100)
    
    Winsock3.GetData bData
    Call s_PrintToDebug(0, UBound(bData), bData)
End Sub

Public Sub s_PrintToDebug(lngArrByteStart&, lngArrByteEnd&, bData() As Byte)
    Dim i&, strTemp$
    For i = lngArrByteStart To lngArrByteEnd
        strTemp = strTemp & " " & Right("0" & Hex(bData(i)), 2)
        If (i + 1) Mod 16 = 0 Then strTemp = strTemp & vbCrLf
    Next
    Debug.Print strTemp
End Sub

以上3个过程,第1,2个可以打印出收到的16进制编码,第3个不能收到正确信息,会得到:

 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00

证明:.GetData必须在_DataArrival中才行,也就是否定了.GetData在外部通过Timer等方式定期清除Winsock缓存的方式。

另外经过测试:

Private Sub Winsock1_DataArrival(ByVal bytesTotal&)
End Sub

不使用Winsock1.GetData bData仍然不影响下次获得全新数据。

还有个测试:

? typename(Winsock1.RemoteHost)
String
? typename(Winsock1.RemotePort)
Long

这下知道它们的类型了吧。

 
全部回复(0)
首页 | 电脑版 |