Seite 1 von 1

Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 9:14 pm
von Kmitska
Hallo Leute,

ich weiß nicht, was mein Problem ist... und bitte um Rat.
Also, ich schreibe eine Server/Client Anwendung. Und das Problem liegt bei dem Server:

Hier ist die Main Funktion (Da stimmt alles):

Code: Alles auswählen

int main()
{
    Socket sock1;
    sock1.create();
    sock1.bind( makeInt(sInfo.serverPort) );
    sock1.listen();
    while (true)
    {
        Socket* tmp_sock = new Socket();
        sock1.accept( *tmp_sock );
        pthread_t b;
        pthread_create(&b, NULL, newCommand, (void*) tmp_sock);
    }
    return 0;
}
Und hier, jetzt kommt das merkwürdige Zeug!!!

Dieser Code hiner funktioniert!:

Code: Alles auswählen

void* newCommand(void* p)
{
    pthread_detach(pthread_self());
    Socket* sock = (Socket*) p;
    string req;
    sock->setTimeout(5);
    sock->recv (req);

    cout << req;

    delete sock;
    return NULL;
}
abeerr, so bald ich was anderes mache, außer req auszugeben kommt nichts: (sogar bei string::length() )

Code: Alles auswählen

void* newCommand(void* p)
{
    pthread_detach(pthread_self());
    Socket* sock = (Socket*) p;
    string req;
    sock->setTimeout(5);
    sock->recv (req);

    cout << req.length();

    delete sock;
    return NULL;
}
Wisst Ihr vielleicht, was da los ist? :/

Re: Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 9:23 pm
von nufan
Häng mal ein endl ans cout ran, also:

Code: Alles auswählen

cout << req.length() << endl;
Die Ausgabe ist zeilenweise gepuffert. Wahrscheinlich beinhaltet dein "req" ein Newline am Ende.

Re: Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 9:29 pm
von Kmitska
dani93 hat geschrieben:Häng mal ein endl ans cout ran, also:

Code: Alles auswählen

cout << req.length() << endl;
Die Ausgabe ist zeilenweise gepuffert. Wahrscheinlich beinhaltet dein "req" ein Newline am Ende.
Okay... und wie könnte ich ihn raus bekommen? Ich meine, ich bekomme ja gar keine Informationen über die Länge etc.

Re: Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 9:34 pm
von nufan
Kmitska hat geschrieben:
dani93 hat geschrieben:Häng mal ein endl ans cout ran, also:

Code: Alles auswählen

cout << req.length() << endl;
Die Ausgabe ist zeilenweise gepuffert. Wahrscheinlich beinhaltet dein "req" ein Newline am Ende.
Okay... und wie könnte ich ihn raus bekommen? Ich meine, ich bekomme ja gar keine Informationen über die Länge etc.
Du hast in deinem Objekt genug Informationen. Ein Newline im req hat entweder seinen Grund oder es wurde am anderen Rechner schon falsch verarbeitet. Lösch es raus oder ersetz es durch Leerzeichen, kommt drauf an wozu der String gut ist.

Re: Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 9:36 pm
von Kmitska
Was sagst Du dazu?

Code: Alles auswählen

void* newCommand(void* p)
{
    pthread_detach(pthread_self());
    Socket* sock = (Socket*) p;
    string req;
    sock->setTimeout(5);
    sock->recv (req);

    string la = "hello Kmitska";
    cout << la.length();

    delete sock;
    return NULL;
}
Funktioniert ebenfalls nicht.

Re: Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 10:05 pm
von Xin
cout.flush()?

Re: Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 10:21 pm
von Kmitska
Kannst Du mir sagen, was flush ganz genau macht und wie ich das verwenden kann? Ich verstehe die Verwendung von flush nicht und was es ganz genau tut.

Re: Cout schreibt nicht!

Verfasst: Mo Feb 11, 2013 11:36 pm
von Xin
Kmitska hat geschrieben:Kannst Du mir sagen, was flush ganz genau macht und wie ich das verwenden kann? Ich verstehe die Verwendung von flush nicht und was es ganz genau tut.
Kennst Du 'Let me google that for you'?

Dein Problem verschwindet, wenn Du endl hinten dran packst. Das fügt ein endl an und führt dann flush aus - schickt also die Daten.
Das endl willst Du nicht, also bruachst Du nur das flush.

Code: Alles auswählen

cout << la.length();  // schreiben
cout.flush();             // und drucken.