作为一种爱好,我对编程连接以太网的 LED 标志以在屏幕上滚动消息很感兴趣。但我无法在VB.NET中创建 UDP 发送器(我目前使用的是 2008)。
现在这个标志已经足够好了,有一个关于它的编程规格表。
但是发送给它的一行示例(第 3 页):
<0x01>Z30<0x02>AA<0x06><0x1B>0b<0x1C>1<0x1A>1This message will show up on the screen<0x04>
用 <0x01> 等代码表示十六进制字符。
现在,要将其发送到我需要使用UDP的标志。但是,我在发送之前都将消息编码为ASCII的示例,例如这个(来自UDP:客户端将数据包发送到服务器并从服务器接收数据包):
Imports System.Threading
Imports System.Net.Sockets
Imports System.IO
Imports System.Net
Public Class MainClass
Shared Dim client As UdpClient
Shared Dim receivePoint As IPEndPoint
Public Shared Sub Main()
receivePoint = New IPEndPoint(New IPAddress(0), 0)
client = New UdpClient(8888)
Dim thread As Thread = New Thread(New ThreadStart(AddressOf WaitForPackets))
thread.Start()
Dim packet As String = "client"
Console.WriteLine("Sending packet containing: ")
'
' Note the following line below, would appear to be my problem.
'
Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(packet)
client.Send(data, data.Length, "localhost", 5000)
Console.WriteLine("Packet sent")
End Sub
Shared Public Sub WaitForPackets()
While True
Dim data As Byte() = client.Receive(receivePoint)
Console.WriteLine("Packet received:" & _
vbCrLf & "Length: " & data.Length & vbCrLf & _
System.Text.Encoding.ASCII.GetString(data))
End While
End Sub ' WaitForPackets
End Class
要在 VB.NET 中输出十六进制代码,我认为语法可能是 &H1A - 发送规范定义为 <0x1A> 的内容。
我可以修改该代码,以正确地将格式正确的数据包发送到此标志吗?
Grant(在发送包含十六进制的数据包之后)、Hamish Smith(使用函数获取十六进制值)和 Hafthor(硬编码 chr() 消息到示例中)的答案在尝试时都不起作用。所以我会研究看看还有什么可能出错的。理论上,如果这个字符串发送成功,我应该会返回一个包含“OK”的消息,这将有助于知道它何时工作。
我已经尝试过,现在能够监控通过的数据包。一个工作数据包示例是这样的(原始十六进制):http ://www.brettjamesonline.com/misc/forums/other/working.raw与我的版本:http ://www.brettjamesonline.com/misc/forums/other /失败的.raw。不同之处在于我的十六进制代码仍未正确编码,在此并排图像中可以看到:http ://www.brettjamesonline.com/misc/forums/other/snapshotcoding.png 。
我已使用此代码生成数据包并发送它:
container = &H1 & "Z" & &H30 & &H2 & "temp.nrg" & &H1C & "1Something" & &H4
' This did not appear to work neither
'container = Chr(&H1) & "Z" & Chr(&H30) & Chr(&H2) & Chr(&H1C) & "1Something" & Chr(&H4)
'<0x01>Z00<0x02>FILENAME<0x1C>1Test to display<0x04> <- the "official" spec to send
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(container)
(完整片段: http: //pastebin.com/f44417743。)