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.)
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie zusammen einen quickie decoder wie diese:
dann verwenden Sie diese zu transformieren:
könnte man auch einen encoder-Funktion, macht diese Decodierung (obwohl ein wenig komplizierter)
und verwenden Sie diese zu transformieren:
oder Sie können einfach erstellen Sie die Zeichenfolge mit Sonderzeichen in es zu beginnen, wie diese:
für das senden eines UDP-Pakets, das folgende sollte genügen:
InformationsquelleAutor Hafthor
Dies könnte helfen. In meiner Firma haben wir kommunizieren mit unserer hardware, mit der eine Art Kombination von ascii-und hex.
Ich diese Funktion verwenden, um hexify ip-Adressen vor der übermittlung an die hardware
Und occationally ich benutze
hexSomething = Hex(Val(number)).PadLeft(2,"0")
als gut.Kann ich dir die Quelle für das ganze Programm, auch wenn es ist so konzipiert, zu sprechen, zu anderer hardware.
EDIT:
Sind, die Sie zu senden versuchen, Pakete in hex, oder Holen Sie die Pakete in hex?
InformationsquelleAutor Grant
Den UDP-client schickt ein array von bytes.
Sie könnte einen memory-stream und schreiben bytes in ein array.
Ich musste löschen Sie zusätzliche Zeilen manuell leider, obwohl ' anerkannt wird und bricht, bis code angezeigt wird... das ist gut. Ich bin durch und versucht, Ihren Ansatz jetzt.
InformationsquelleAutor Hamish Smith
Veröffentlicht Sie Bibliotheken für eine Reihe von Sprachen, darunter Visual Basic (in separater Datei). Getestet habe ich die demos mit Ihren Zeichen und Sie funktionieren!
http://support.favotech.com
InformationsquelleAutor