VB6 -> Beliebige Sprache (Überarbeitet)

  • Allgemein

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Noim.

    VB6 -> Beliebige Sprache (Überarbeitet)

    Hallo Leute,

    ich weiß garnicht wie oft ich schon hier im Forum über meine Haussteuerung geschrieben habe. Aber nun bin ich wieder bei einem Punkt wo ich einfach nicht weiter weiß.
    Ich versuche im Moment direkt über Telnet mit dem Verteiler im Haus zu kommunizieren. Dafür habe ich vom voherigen Besitzer ein paar anweisungen bekommen, mit welchen Befehlen.

    Es funktioniert so:

    Man verbindet sich und man bekommt zu erst diese HEX Codes übermittelt:

    ff fb 01 ff fb 03

    Soweit ich nachforschen konnte sind das einfach nur Zeichen für irgendwelchen allgemeinen Regelungen (ietf.org/rfc/rfc855.txt und tools.ietf.org/html/rfc858), also nicht wirklich wichtig. Eine Shell Prompt oder irgendetwas vergleichliches gibt es nicht zur Info.
    Als nächstes muss man den Befehl: >>o
    senden. Auf diesen antwortet der "CIA" mit "A?" ohne nullterminierung oder sonstigen Zeilenbruch, wirklich nur rein dieser Text. Auf diesen muss man dann eine Adresse senden, die eine Zahl von 1-127 sein kann.
    Soweit so gut. Nun habe ich aber immer das Problem das sobald ich z.B die 34 sende, er nur die 3 annimmt, und die 4 schon zur nächsten Frage hinzuzählt (Zu dieser komme ich gleich). Doch bei dem Programm des Vorbesitzers, geht es einwandfrei.
    Der Vorbesitzer des Hauses hat es mit Form Sockets in VB6 umgesetzt (pastebin.com/xgyt10i2), und dort funktioniert es ja auch, dass er z.B die 34 komplett senden kann.
    Nun aber zum weiteren Ablauf.
    Nachdem mann die Frage "A?" mit einer Zahl von 1-127 beantwortet hat, sendet der "CIA" direkt ein "D?", auch wieder ohne irgendwelche Abtrennungen oder Brüche. Hier muss man mit einer Zahl von 1-16 Antworten, das ist dann welche Kanäle man schalten will, und hier für würde er dann die oben genannte 4 verwenden.

    So, nun ist also die Frage, was machen denn die Form Sockets anders, als z.B das Net Module in Node oder der TCPClient in C# ?
    Ich möchte also versuchen diesen VB6 Code (pastebin.com/xgyt10i2) in C# oder mir sogar lieber JavaScript (Node) umzuwandeln.

    Mit Freundlichen Grüßen Nils

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Noim“ ()

    Noim schrieb:


    So, nun ist also die Frage, was machen denn die Form Sockets anders, als z.B das Net Module in Node oder der TCPClient in C# ?
    Ich möchte also versuchen diesen VB6 Code (pastebin.com/xgyt10i2) in C# oder mir sogar lieber JavaScript (Node) umzuwandeln.


    ​Und du weißt jetzt nicht wie du das von VB6 in C# Umwandeln kannst, oder was genau ist deine Frage?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Noim schrieb:

    in C# ?
    Vielleicht ist es einfacher, Du konvertierst den Code zunächst nach VB.NET, denn VB.NET ist syntaktisch VB6 nahe.
    Den laufenden VB.NET-Code kannst Du dann per Automat nach C# übertragen lassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mir ist gerade beim weiteren suchen im Internet aufgefallen, das die SendData Methode in VB6 den String in ansi convertiert. Könnte es vielleicht daran liegen ?
    @Noim Dafür gibt es unter .NET das Encoding.
    Das muss natürlich bei Stringübergabe bei Sender und Empfänger übereinstimmen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habe ich auch gerade Versucht.

    C#-Quellcode

    1. TcpClient client = new TcpClient("192.168.0.210", 10001);
    2. NetworkStream stream = client.GetStream();
    3. byte[] buffer = Encoding.Default.GetBytes(">>o");
    4. stream.Write(buffer, 0, buffer.Length);
    5. stream.Flush();
    6. buffer = Encoding.Default.GetBytes("34");
    7. stream.Write(buffer, 0, buffer.Length);
    8. stream.Flush();
    9. buffer = Encoding.Default.GetBytes("0");
    10. stream.Write(buffer, 0, buffer.Length);
    11. stream.Flush();
    12. Console.ReadLine();
    13. client.Close();


    Vollzitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Noim schrieb:

    C#-Quellcode

    1. buffer = Encoding.Default.GetBytes("34");
    Default ist Unicode.
    Du musst da Encoding.Ansi oder solch auswählen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Encoding.Ansi gibt es nicht. Und bei VS stand bei der Beschreibung von Default, das es Ansi ist.

    Vollzitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Noim schrieb:

    das es Ansi ist
    Default ANSI des Systems, also die jeweils eingestellte Sprache.
    Überzeuge Dich davon, dass das bei Dir so funktioniert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Encoding.Default ist Ansi (CP1252 bei deutschem Windows).
    Ohne Encoding Angabe --> UTF8

    Spielt aber nur eine Rolle bei Zeichen > 127

    Wenn es mit dem String "34" (Ascii 51 + 52 / &H33 + &H34) nicht funktioniert, versuch' mal die Zahl 34 oder &H34.

    34 -> Chr(34) -> """
    &H34 ->chr(&H34) -> "4"

    oder die entsprechende Byte-Sequenz 34 oder 52.

    Eierlein schrieb:

    Encoding.Default ist Ansi (CP1252 bei deutschem Windows).
    Ohne Encoding Angabe --> UTF8

    Spielt aber nur eine Rolle bei Zeichen > 127

    Wenn es mit dem String "34" (Ascii 51 + 52 / &H33 + &H34) nicht funktioniert, versuch' mal die Zahl 34 oder &H34.

    34 -> Chr(34) -> """
    &H34 ->chr(&H34) -> "4"

    oder die entsprechende Byte-Sequenz 34 oder 52.


    Ich glaube es gar nicht.

    C#-Quellcode

    1. byte[] bt = new byte[] {34};
    2. socket.Send(bt);

    Es hat geklappt. Vielen vielen dank für eure Hilfe <3

    #Edit:
    Da ich eigentlich eher vorhabe mit Node zu arbeiten, habe ich auch nun einen einfachen weg für NodeJs gefunden.

    Quellcode

    1. ​const bf = Buffer.from([34]);

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Noim“ ()