c++ Socket-Client



  • Hallo zusammen,
    ich habe einen Switch, der mit TELNET erreichbar und konfigurierbar ist. Und genau das möchte ich nicht über die Konsole machen, sondern aus meinem Programm heraus.
    Bei einer Telnet-Verbindung beginnt der Server mit einer Begrüßung gefolgt von dem Login. Die Socket-Verbindung funktioniert.
    Mein Problem ist, dass ich die Daten NACH dem Login lesen möchte, und nicht den Begrüßungs-Kram. Im Moment habe ich im Buffer immer den Begrüßungs-Kram.
    Damit ist die konkrete Frage: Wie kann ich den Lese-Puffer leeren, bis zu dem Moment, nachdem ich einen Befehl XY an den Server/Switch gesendet habe.

    // bis hierher Input-Buffer leeren
    	n = write(sockfd, command, strlen(command));
    
    // ab hier Input-Buffer lesen
    	char buffer[255];
    	memset(buffer, 0, 255);		
    	n = read(sockfd, buffer, 253);
    

    Vielen Dank für eure Anregungen!
    Grüße,
    Jörg



  • Hi,

    warum nutzt du nicht recv()/send()?
    Ansonsten verstehe ich dein Problem nicht so ganz. Du kommst nicht drum rum den "Begrüßungs-Kram" auszulesen. Wenn er dich nicht interessiert, verwirf ihn halt und empfang das nächste Paket. 😕
    Suchst du vielleicht strstr() bzw. std::string::find() oder auch std::search()?



  • Hey, danke für die Gegenfrage... Alles was ich bis dahin gelesen hatte, funktionierte mit write und read. (Die Daten bis dahin einfach verwerfen ist nat. auch ne Idee)
    Mit recv und send scheint es auch einfacher zu funktionieren.

    Jetzt habe ich das Problem, dass das char, welches ich sende, am Ende um ein leeres Zeichen ergänzt wird -> damit ist der Username nat. falsch.
    sizeof(user)-1 funktioniert nicht, bzw. bei -2 wird das letzte Zeichen des usernamens gelöscht und dahinter ist trotzdem das Leerzeichen.
    Sorry, aber ich bin recht unbeholfen...

    Grüße



  • Ich verstehe weiterhin dein Problem nicht ganz. Also auf den Server selbst hast du keinen Einfluss, bzw. der ist halt vorgegeben und er hält sich an das Protokoll. Soweit richtig verstanden?

    dfpes schrieb:

    Jetzt habe ich das Problem, dass das char, welches ich sende, am Ende um ein leeres Zeichen ergänzt wird

    Du meinst den String? 1 char(acter) = 1 Zeichen. Sollte man vielleicht mal ins C Forum verschieben, oder ins Pinguin Forum.
    Was meinst du mit "am Ende um ein leeres Zeichen ergänzt wird"? Heißt das, dass es so sein soll du es aber nicht hinbekommst?

    char buf[0x100] = "Name";
    strcat(buf, " "); // auf die Puffergröße achten!
    send(sock, buf, strlen(buf), 0);
    

    Oder steht ein Leerzeichen am Ende und du möchtest es weg haben?

    char buf[0x100] = "Name ";
    buf[strlen(buf) - 1] = '\0'; // strlen(buf) muss garantiert > 0 sein!
    send(sock, buf, strlen(buf), 0);
    

Log in to reply