В качестве хобби мне интересно программировать светодиодный знак Ethernet для прокрутки сообщений по экрану. Но у меня возникают проблемы с отправкой отправителя UDP в VB.NET (сейчас я использую 2008).Отправка данных UDP, включая гекс, с использованием VB.NET
Теперь знак достаточно хорош, чтобы иметь a specifications sheet on programming for it.
Но пример строки для отправки на него (страница 3):
<0x01>Z30<0x02>AA<0x06><0x1B>0b<0x1C>1<0x1A>1This message will show up on the screen<0x04>
С кодами, таких как < 0x01> представляющих шестигранную характер.
Теперь, чтобы отправить это знаку, мне нужно использовать UDP. Однако примеры у меня есть все зашифровать сообщение, как ASCII перед отправкой, как этот (от UDP: Client sends packets to, and receives packets from, a server):
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
Для вывода hexcode в VB.NET, я думаю, что синтаксис может быть, возможно, & H1A - отправить то, что спецификации будут определять как < 0x1A>.
Мог ли я изменить этот код, чтобы правильно отправить правильно сформированный пакет этому знаку?
Ответы от Grant (после отправки пакета с шестнадцатеричным в нем), Hamish Smith (с использованием функции для получения шестнадцатеричных значений) и сообщения Hafthor (hardcoded chr() в пример), когда все попытки не работали. Поэтому я буду исследовать, что еще может пойти не так. Теоретически, если эта строка отправлена успешно, у меня должно получиться сообщение, содержащее «ОК» назад, что поможет узнать, когда оно будет работать.
Я пробовал и теперь могу отслеживать проходящие пакеты. Пример рабочего пакета - это (в шестнадцатеричном формате): 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)
Хорошо, я возобновил смотреть в к этому. Я обнаружил, что using wirehark позволяет просматривать исходные пакеты udp. Он появляется с примером кода, который я использовал, HEX charecters появляются как пустые (00) символы в фактическом пакете. – SuperRoach 2008-12-07 10:12:04
Вы когда-нибудь успешно работали с этим предприятием? У меня есть один из этих знаков, который имеет последовательный порт для отправки его команд, и мне еще не удалась с отправкой его команд. – NexAddo 2012-03-13 21:07:28