Senden von UDP-Daten, einschließlich hex mit VB.NET

Als ein hobby, ich bin interessant, in der Programmierung einer Ethernet-angeschlossene LED-Zeichen zu Blättern Nachrichten über den Bildschirm. Aber ich habe Schwierigkeiten damit, ein UDP-sender in VB.NET (ich bin mit 2008 aktuell).

Nun das Schild ist schön genug, um ein Lastenheft auf die Programmierung für Sie.

Aber ein Beispiel von einer Zeile zu senden, um es (Seite 3):

<0x01>Z30<0x02>AA<0x06><0x1B>0b<0x1C>1<0x1A>1This message will show up on the screen<0x04>

Mit codes wie <0x01> Vertretung der hex-Zeichen.

Nun, zum senden dieser zu den Zeichen, die ich verwenden müssen UDP. Aber die Beispiele, die ich alle haben, codieren Sie die Nachricht als ASCII vor dem senden, wie dieser (aus UDP: Client sendet Pakete und empfängt Pakete von einem 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

Ausgabe ein hexcode in VB.NET ich denke, die syntax möglicherweise &H1A - zu senden, was die Spezifikationen definieren würde als <0x1A>.

Könnte ich ändern, dass code, um richtig senden Sie eine korrekt formatierte Paket an dieses Zeichen?

Die Antworten von Grant (nach dem senden ein Paket mit hex), Hamish Smith (mit einer Funktion, um hex-Werte) und Hafthor (hardcoded chr () - Botschaft in B.), wenn Sie versucht, alles hat nicht funktioniert. Ich werde also recherchieren, um zu sehen, was sonst noch schief gehen könnte. In der Theorie, wenn dieser string wird erfolgreich gesendet, ich sollte eine Meldung mit "OK" zurück, die helfen, zu wissen, wenn es funktioniert.

Habe ich versucht und bin nun in der Lage, überwachen die Pakete durch gehen. Ein funktionierendes Paket Beispiel ist dies (raw hex): http://www.brettjamesonline.com/misc/forums/other/working.raw vs meine version: http://www.brettjamesonline.com/misc/forums/other/failed.raw. Der Unterschied ist mein hex-codes sind noch nicht richtig kodiert, gesehen in diesem side-by-side-Bild: http://www.brettjamesonline.com/misc/forums/other/snapshotcoding.png.

Ich habe diesen code zu generieren, das Paket und schickt es an:

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)

(Full-snippet: http://pastebin.com/f44417743.)

Ok, ich habe wieder auf der Suche in diesem. Ich habe entdeckt, mit wireshark lässt mich die Anzeige der raw-udp-Pakete gesendet. Es wird mit dem Beispiel code, den ich verwendet habe, Die HEX-Charaktere sind wieder als leer (00) chars in das eigentliche packet.
Waren Sie erfolgreich mit diesem Projekt? Ich habe eines dieser Zeichen, hat aber eine serielle Schnittstelle zum senden von Befehlen und ich hatte noch nicht viel Glück noch mit dem senden der Befehle.
Ja, ich löste es vor einer Weile mit einem Haken - seperate, um all dies, ist eine "Kontrolle" Teil des Codes, die Sie festlegen müssen. In kurzen, erstellen Sie eine Datei auf das RAM-Teil statt Flash für langfristige Zuverlässigkeit. Das Teil ist nicht dokumentiert, so ich musste mich zwingen, es zu tun occasionaly über einen klobigen windows-app. Sobald das erledigt war, obwohl, ich hatte eine Klasse in php geschrieben, um zu verarbeiten das senden (es wurde erfolgt über ethernet)

InformationsquelleAutor SuperRoach | 2008-10-04

Schreibe einen Kommentar