gtkmm und c-sockets



  • Hallo liebe community,

    ich habe ein Problem mit dem Gtk::Entry Widget. Und zwar möchte ich einen Clienten in gtkmm schreiben und somit dient das Widget als Eingabe eines Send-Befehls. In meinem Falle als Test:

    GET / HTTP/1.1\r\nHost: www.google.de\r\nConnection: close\r\n\r\n
    

    Wenn ich diese Zeichenkette ohne die "get_text()" an den Socket übergebe, funktioniert es wunderbar. Wenn ich aber den Befehl in das Entry eingebe, dann schickt er den Befehl zwar ab, aber stürzt dann bei dem Empfangen ab.
    Hier mein c++-Snippet:

    msg =  entry1->get_text();
        if(tcpsock.send(msg))
            cout << msg << "\nerfolgreich gesendet" << endl;
        msg = "";
        if(tcpsock.recv(msg)>0)
            cout << msg << "\nerfolgreich erhalten" << endl;
    

    Wie ihr seht nutze ich std::string und nicht Glib::ustring. Das liegt daran, dass ich die Socket-Klasse in string geschrieben habe und eigentlich keine Unbekannten Zeichen mitgesendet werden sollten.
    Ich hoffe ihr könnt mir helfen 🙂

    MfG
    Alive



  • Alive schrieb:

    GET / HTTP/1.1\r\nHost: www.google.de\r\nConnection: close\r\n\r\n
    

    Nimmst du die Zeile so entgegen? Sendet er dann \r\n als Klartext? Also im Endeffekt als \\r\\n ?

    Alive schrieb:

    Wenn ich diese Zeichenkette ohne die "get_text()" an den Socket übergebe, funktioniert es wunderbar. Wenn ich aber den Befehl in das Entry eingebe, dann schickt er den Befehl zwar ab, aber stürzt dann bei dem Empfangen ab.

    Mit welcher Fehlermeldung bzw. mit welchem Signal? Mal den Debugger warmlaufen lassen? Buffer zu klein? 😃



  • Also er gibt in der Konsole \r\n aus anstatt einen Zeilenumsprung zu machen. Das ist auch das Problem, doch ich weiß nicht wie ich das lösen kann.



  • Einfach alle Vorkommen von \\r\\n im String durch \r\n ersetzen. 🙂



  • hä? Der string lautet doch: GET / HTTP/1.1\r\nHost: www.google.de\r\nConnection: close\r\n\r\n



  • Nennen wir "GET / HTTP/1.1\r\nHost: www.google.de\r\nConnection: close\r\n\r\n" den String.

    String in Entry eingegeben, gibt folgendes in der Konsole aus:

    GET / HTTP/1.1\r\nHost: www.google.de\r\nConnection: close\r\n\r\n

    String normal über cout ausgegeben, gibt folgendes (richtiges) in der Konsole aus:

    GET / HTTP/1.1
    Host: www.google.de
    Connection: close



  • Sry dass ich noch einmal schreibe!!!!
    Aber du hast recht, ich muss einfach mir replace die "\\r\\n" durch "\r\n" ersetzen.
    Danke 🙂


Anmelden zum Antworten