gpt4 book ai didi

vb.net - 而是以字节数组发送多个十六进制

转载 作者:行者123 更新时间:2023-12-03 12:05:27 27 4
gpt4 key购买 nike

我对套接字发送多个十六进制的套接字有问题

这里的细节:

 Private Sub sendACK()
Dim msgACK As String
Dim sendBytes As Byte()
tmpStr = ""
list.Clear()
msgACK = "33CC"
For j = 1 To Len(msgACK)
list.Add(Mid(msgACK, j, 2))
j += 1
Next

For Each tmpStr In list
sendBytes = HexToBytes(tmpStr)
clientSocket.BeginSend(sendBytes, 0, sendBytes.Length, SocketFlags.None, New System.AsyncCallback(AddressOf OnSend), clientSocket)
Next
End Sub

Public Function HexToBytes(ByVal s As String) As Byte()
Dim bytes As String() = s.Split(" "c)
Dim retval(bytes.Length - 1) As Byte
For ix As Integer = 0 To bytes.Length - 1
retval(ix) = Byte.Parse(bytes(ix), System.Globalization.NumberStyles.HexNumber)
Next
Return retval
End Function

Private Sub OnSend(ByVal ar As IAsyncResult)
clientSocket = ar.AsyncState
clientSocket.EndSend(ar)
Thread.Sleep(100)
End Sub

==>列为arraylist

该代码将是结果:
socket 送33
结束发送
套接字发送CC
结束发送

===========================
该程序应该像这样一次发送:
套接字发送33 CC
结束发送

===========================
有没有关于将字符串“33CC”转换为字节,然后该程序仅在“for each”中发送1次的想法?

感谢您的阅读和回答。
GBU

最佳答案

您的假设是不正确的。实际上,它确实一次发送了两个字节。您只调用一次BeginSend,并且给它两个字节,因此,如果它在另一端完全接收到它们,则它确实在发送它们。实际上,单独发送它们或一起发送它们之间没有任何区别。由于套接字作为流工作,因此发送每个字节之间的时间长度基本上无关紧要。接收端将无法知道两个字节是一起发送还是单独发送。所有接收端将知道这两个字节是按该顺序发送的。如果您认为它们是作为两个单独的“发送”在接收端发送的,则听起来您在对如何从套接字读取数据进行了一些无效的假设。

但是,我要提到的是,通过先创建一个十六进制字符串然后解析它来发送字节的方式有点愚蠢。如果您需要将其解析为字符串,因为您正在从文本文件或其他内容中读取十六进制值,那很好,但是否则,您应该仅在代码中使用十六进制字节文字,而不是字符串,例如:

Dim sendBytes As Byte() = {&H33, &HCC}

关于vb.net - 而是以字节数组发送多个十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com