Cout schreibt nicht!

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Cout schreibt nicht!

Beitrag von Kmitska » Mo Feb 11, 2013 9:14 pm

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? :/

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Cout schreibt nicht!

Beitrag von nufan » Mo Feb 11, 2013 9:23 pm

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.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: Cout schreibt nicht!

Beitrag von Kmitska » Mo Feb 11, 2013 9:29 pm

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.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Cout schreibt nicht!

Beitrag von nufan » Mo Feb 11, 2013 9:34 pm

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.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: Cout schreibt nicht!

Beitrag von Kmitska » Mo Feb 11, 2013 9:36 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Cout schreibt nicht!

Beitrag von Xin » Mo Feb 11, 2013 10:05 pm

cout.flush()?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: Cout schreibt nicht!

Beitrag von Kmitska » Mo Feb 11, 2013 10:21 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Cout schreibt nicht!

Beitrag von Xin » Mo Feb 11, 2013 11:36 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten