telnet: Wie solche Befehle senden: "0x4F" ?

Terminator2

Erfahrenes Mitglied
Hallo,

undzwar habe ich folgenden Code gefunden:

Code:
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.io
Imports System.Threading 
'Die Imports
 
  Public stream As NetworkStream
    Public sr As StreamReader
 
 Private Function sendCommand(ByVal send As String) As String
        send += vbCrLf
        Dim data As [Byte]() = Encoding.ASCII.GetBytes(send)
        stream.Write(data, 0, data.Length)
        sr = New StreamReader(stream)
        Dim buffer As New StringBuilder
        Do While sr.Peek() > 0
            Thread.Sleep(100)
            buffer.Append(sr.ReadLine + vbCrLf)
        Loop
        Return buffer.ToString
    End Function
Dim info as String
       Dim server As String = "servername"
        Dim user As String = "benutername"
        Dim password As String = "passwort"
        Dim client As New TcpClient(server, 110)
        stream = client.GetStream()
        sr = New StreamReader(stream)
        info += sendCommand("?")
MSGBOX(info)

Über den Ausführen Befehl telnet kann ich das zu steuernde Gerät mit den normalen Kurzbefehlen wie "O" steuern. Bei der Steuerung per VB.NET muss jedoch aus dem "O" laut Anleitung "0x4F" erzeugt werden.
Allerdings weiß ich nicht, wie ich an dieses Format komme. Hier noch ein kleiner Ausschnitt aus der Erklärung:
Die Kurzbefehle sind nicht über die Kommandozeile nutzbar, sie können/sollen für eigene Software-Anwendungen genutzt werden, die das Telnet Protokoll unterstützen.
Die Kurzbefehle sind nicht ASCII-codiert, sondern werden binär verwendet. Beispiel: Der Befehl 'O' hat den hexadezimalen Wert 0x4F. Erhält der Telnet-Server diesen Befehl, erwartet er im nächsten empfangenen Byte die Daten wie die Ausgänge geschaltet werden sollen. Sendet man nun über die Konsole O 1, erhält der Server folgende Daten 0x4F 0x20 0x31 (das Leerzeichen hat den Wert 0x20 und die 1 den Wert 0x31). Da nur ein Byte erwartet wird, findet die 0x31 keine Beachtung. Der Wert 0x20 veranlasst den Server dazu den 6. Ausgang zu setzen, da das 6. Bit gesetzt ist.
Wird O1 über die Konsole gesendet, erhält der Server folgende Daten: 0x4F 0x31, es werden nun die Ausgänge 1, 5 und 6 gesetzt, da das 1., 5. und 6. Bit gesetzt sind.

Wie kann ich dieses Format erzeugen?


Gruß David
 
Dass das Hexadezimal ist, habe ich auch schon gesehen. Die Frage ist nur, warum beispielsweise ein "O" den Wert "0x4F" hat.
Ich habe bisher den Ascii Code erzeugt und davon den Hexadezimalwert. Das ergibt dann 4F. Leider fehlt die 0x am Anfang. Außerdem muss ich ein Bytearray erzeugen, um die Befehle senden zu können. Also womit soll ich den String dann encodieren, damit die richtigen Bytes rauskommen?
 
Ich weiß nicht wie es in .NET ist, aber in PHP ist das 0x das Zeichen dafür, dass die darauffolgende Zahl im Hexadezimal System ist. Also einfach an das 4F das 0x vorne drankleben ^^
Kann mich aber auch täuschen
 
Die Idee hatte ich auch schon :p Das mit der Ankündigung des Hexadezimalzeichens könnte stimmen... Dann wäre da nur noch das Problem mit dem Umwandeln von den Zeichen in Bytes...
 
Zurück