Winsock API: Das Empfangen mit recv



  • Ich bin dabei einen Chat zu schreiben. Seit ich allerdings den Client dazu veranlasse den Benutzernamen mitzusenden (also in einer Zeichenkette, ich nutze nicht die klasse string sondern zeiger auf char), wird in der Methode zum Empfangen eine Exception aufgerufen. Wäre lieb wenn ihr mir helfen könntet. Siehe auch "Nicknamen in einem chat ermöglichen".

    Hinweise:

    1.) Das Empfangen geschieht in einem thread
    2.) Das Empfangen geschieht in einer Methode einer selbstdefinierten Klasse

    Vermutung:

    Ich denke das Problem liegt in der Anzahl der eingelesenen Zeichen, damit habe ich aber schon immer probleme gehabt.

    Hier die Methode:

    char* Connection::RecieveData ()
    {

    //Nachricht empfangen
    int lenght = recv (client, read, 358, 0);
    //Nullterminationszeichen anhängen
    read[lenght] = '\0';
    //Ergebnis in Rückgabevariable kopieren
    char* ergebnis = NULL;
    strcpy (ergebnis, read);

    return ergebnis;
    }



  • Wenn der Buffer "read" mindestens 358 Byte groß ist, liegt das Problem auf jedenfall an diesen Zeilen:

    char* ergebnis = NULL;
    strcpy (ergebnis, read);
    

    Der Zeiger zeigt nicht auf reservierten Speicher, sondern auf NULL, das gibt natürlich einen Fehler, wenn du dort etwas hinschreiben willst.

    Ich bin mir gerade ziemlich unsicher, aber lass die Zeilen mal weg und schreib einfach

    return read;
    


  • char* ergebnis = NULL;
    strcpy (ergebnis, read);

    ich glaub nicht, dass die wirklich jemals funktioniert hat 😉

    [EDIT] wohl zu spät... 🙂 [/EDIT]

    [ Dieser Beitrag wurde am 29.12.2002 um 18:42 Uhr von CMatt editiert. ]


Anmelden zum Antworten