L'envoi de données UDP, y compris à l'aide de hex VB.NET
Comme un hobby, je suis intéressant dans la programmation Ethernet connecté signe de LED pour faire défiler les messages à travers un écran. Mais je vais avoir du mal à faire un UDP expéditeur dans VB.NET (je suis en utilisant 2008 actuellement).
Maintenant le signe est assez agréable d'avoir une feuille de spécifications sur la programmation pour ce.
Mais un exemple d'une ligne à envoyer (page 3):
<0x01>Z30<0x02>AA<0x06><0x1B>0b<0x1C>1<0x1A>1This message will show up on the screen<0x04>
Avec les codes comme <0x01> représentant la tête du personnage.
Maintenant, pour envoyer ce le signe-je besoin pour utiliser UDP. Cependant, les exemples que j'ai tous les encode le message que ASCII avant de les envoyer, comme celui-ci (à partir de UDP: le Client envoie les paquets, et reçoit des paquets à partir d'un serveur):
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
Pour une sortie en hexadécimal dans VB.NET je pense que la syntaxe peut éventuellement être &H1A - d'envoyer ce que le cahier des charges serait de définir comme <0x1A>.
Pourrais-je modifier ce code, afin d'envoyer correctement correctement formaté paquet de ce signe?
Les réponses de Subvention (après l'envoi d'un paquet avec hex), Hamish Smith (à l'aide d'une fonction permettant d'obtenir les valeurs en hexadécimal), et Hafthor (codé en dur (chr) un message par exemple) lors de la tentative de tout n'a pas fonctionné. Donc je vais de recherche pour voir ce qui pourrait aller mal. En théorie, si cette chaîne est envoyée avec succès, je devrais avoir un message contenant "OK", ce qui l'aide à savoir quand il fonctionne.
J'ai essayé et je suis maintenant en mesure de surveiller les paquets. Un travail de paquets exemple est la suivante (en raw hex): http://www.brettjamesonline.com/misc/forums/other/working.raw vs ma version: http://www.brettjamesonline.com/misc/forums/other/failed.raw. La différence est mes codes hexadécimaux sont pas encore codé correctement, vu de ce côté-à-côte l'image: http://www.brettjamesonline.com/misc/forums/other/snapshotcoding.png.
J'ai utilisé ce code pour générer le paquet et l'envoyer:
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 extrait de: http://pastebin.com/f44417743.)
Vous n'avez jamais eu de succès avec cette entreprise? J'ai un de ces signes qui dispose d'un port série pour envoyer des commandes et je n'ai pas eu de chance, mais avec lui envoyant des commandes.
Ouais, j'ai résolu il y a un moment, avec un rattrapage séparé de tout cela, est un "contrôle" de la partie de code que vous devez définir. En bref, vous devez créer un fichier sur la RAM de la partie à la place de Flash pour la fiabilité à long terme. La partie n'est pas documenté, donc j'ai eu la force de le faire ponctuellement par l'intermédiaire d'un maladroit application windows. Une fois que cela a été fait si, j'ai eu une classe en php écrites pour gérer l'envoi (il a été fait via ethernet)
OriginalL'auteur SuperRoach | 2008-10-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez mettre ensemble un quickie décodeur comme celui-ci:
puis de les utiliser pour transformer:
vous pouvez aussi faire un codeur fonction qui annule ce décodage (bien qu'un peu plus compliqué)
et de l'utiliser pour transformer:
ou vous pouvez simplement construire la chaîne de caractères spéciaux dans les il pour commencer comme ceci:
pour l'envoi d'un paquet UDP, ce qui suit devrait suffire:
OriginalL'auteur Hafthor
Cela peut vous aider. Dans mon entreprise nous avons à communiquer avec notre matériel à l'aide d'une sorte de combinaison de l'ascii et hex.
- Je utiliser cette fonction pour hexify adresses ip avant de les envoyer au matériel
Et occationally-je utiliser
hexSomething = Hex(Val(number)).PadLeft(2,"0")
.Je peux vous donner la source de l'ensemble du programme aussi, si elle est conçue pour parler à un matériel différent.
EDIT:
Sont que vous essayez d'envoyer des paquets en hexadécimal, ou obtenir des paquets en hexadécimal?
OriginalL'auteur Grant
Le client UDP envoie un tableau d'octets.
Vous pouvez utiliser un flux de mémoire et d'écrire des octets dans un tableau.
J'ai dû supprimer les lignes manuellement malheureusement, bien que " est reconnu et se décompose affichage de code... ce qui est une sorte de bon. Je vais à travers et essayer de votre approche.
OriginalL'auteur Hamish Smith
Ils ont posté des bibliothèques pour un tas de langues, y compris Visual Basic (dans le fichier séparé). J'ai testé les démos avec un de leurs signes et ils travaillent!
http://support.favotech.com
OriginalL'auteur