В качестве хобби мне интересно программировать светодиодный знак, подключенный к Ethernet, для прокрутки сообщений на экране. Но у меня возникают проблемы с отправкой UDP-отправителя в VB.NET (сейчас я использую 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>.
Могу ли я изменить этот код, чтобы правильно отправлять правильно отформатированный пакет на этот знак?
Ответы Гранта (после отправки пакета с шестнадцатеричным в нем), Хэмиша Смита (использующего функцию для получения шестнадцатеричных значений) и Хафтара (жестко закодированное сообщение chr () в качестве примера) при попытке выполнить все не работали. Поэтому я исследую, чтобы увидеть, что еще может пойти не так. Теоретически, если эта строка отправлена успешно, я должен получить обратно сообщение «OK», которое поможет узнать, когда она работает.
Я попытался и теперь могу отслеживать проходящие пакеты. Вот пример рабочего пакета (в необработанном шестнадцатеричном формате): http://www.brettjamesonline.com/misc/forums/other/working.raw по сравнению с моей версией: http://www.brettjamesonline.com/misc/forums/other/failed.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.)