C++ Char Array nach Zahlen parsen, in INT´s schieben und rechnen.



  • Nabend zusammen.
    Ich habe ein kleines (für mich, großes) Problem.
    Ich schreibe ein FTP Client.

    Eine FTP-Connection besteht ja aus zwei Verbindungen.
    Eine Steuerverbindung und eine Datenverbindung.
    Nun moechte ich Daten vom Server herunterladen.
    D.h.
    In der Steuerverbindung sende ich den "PASV" Befehl.
    Der Server antwortet nun mit:
    227 Entering Passive Mode (127,0,0,1,16,165)
    Erläuterung:
    127,0,0,1 = Die IP vom Server (127.0.0.1)
    Und 16,165 ist nun der Port der geöffnet wurde und wo die Datenverbindug nun sattfinden soll.
    Der Port berechnet sich so:
    16,165 = 16 * 256 + 165
    Also Port: 4261

    227 Entering Passive Mode (127,0,0,1,16,165)
    Ist "char buf[2048];"
    Nun soll das Programm die letzten zwei Zahlen aus dem Buffer auslesen.
    In diesem Falle 16 und 165.
    Damit die Obige Rechnung durchführen (16 * 256 + 165)
    Ergebis in ein INT schieben, den ich dann als Port verwenden kann um
    Dann mit RETR file.txt die file.txt runterladen kann.

    Vielen Dank im Voraus!
    Markus.



  • Ein kleines Stückchen weiter...
    Das gute an Arrays ist ja,dass man auf die einzelnen Bytes zugreifen kann.

    Ursprünglich:
    buf: 227 Entering Passive Mode (100,100,100,100,14,189)

    Mit:

    cout << "buf: " << buf[43] << buf[44] << "+" << buf[46] << buf[47] << buf[48] << endl;
    

    Kommt dies raus:
    buf: 14+189

    Das klappt ja allerdings nur sofern die erste Zahl aus 2 Ziffern besteht und die zweite Zahl aus 3 Ziffern.
    Dies ist aber nicht immer der Fall..nur meistens.

    Also ist das wohl nicht gerade elegant...
    Was könnte man noch machen?



  • Sorry,dass ich hier so rumspamme.
    Aber was in jenen Fall funktionieren würde, wäre
    wenn man den Array nach "," also Kommas durchsucht.
    Er den Inhalt der nach dem vierten Komma in ein int steckt und den Inhalt nach dem fünften Komma in ein anderen int.
    Dann könnte man damit ja die Rechnung des Ports machen.
    Ist dies Möglich? Und wenn ja wie? Oder gibt es eine noch bessere Lösung?



  • Warum nimmst du nicht einfach die FTP Functions? 😕




Anmelden zum Antworten