Zeilenumbruch bei recv() - Sockets



  • Zu Testzwecken habe ich das Code-Beispiel von http://www.pc-adviser.de/socket_programmierung.html als Grundlage für eine winzige Client-Server Applikation genutzt. Doch - wie auch schon im Bsp. ersichtlich - wird bei jeder Datenübermittlung ein Zeilenumbruch an die gesendeten Daten angehängt.

    felix@murphy:~ > telnet localhost 2000
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    My name is: Felix
    Hello Felix
    , nice to meet you!
    Connection closed by foreign host.

    Was logischerweise eigentlich wie folgt aussehen müsste:

    felix@murphy:~ > telnet localhost 2000
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    My name is: Felix
    Hello Felix, nice to meet you!
    Connection closed by foreign host.

    Wo "entsteht" also dieser ominöse Zeilenumbruch mitten im Satz? Aber vor allem, wie kann ich mich demselbigen entledigen?

    int handling(int c)
    {
    char buffer[BUFFER_SIZE], name[BUFFER_SIZE];
    int bytes;
    
    strcpy(buffer, "My name is: ");
    bytes = send(c, buffer, strlen(buffer), 0);
    if (bytes == -1)
    return -1;
    
    bytes = recv(c, name, sizeof(name) - 1, 0);
    if (bytes == -1)
    return -1;
    name[bytes] = '\0';
    
    sprintf(buffer, "Hello %s, nice to meet you!\r\n", name);
    bytes = send(c, buffer, strlen(buffer), 0);
    if (bytes == -1)
    return -1;
    
    return 0;
    }
    


  • das liegt wohl wahrscheinlich an der eingabe. du gibt felix[enter] ein und sendest quasi das [enter] mit.



  • Das habe ich mir auch bereits gedacht, daher auch die Frage, _wie_ man diese Enter-Eingabe wieder aus dem Übermittelten entfernen kann. Gibt es dafür denn keine spezielle Funktion. Das Kürzen des Strings um 2 Zeichen (Die Variable "Bytes" gibt jedesmal aus, dass der String um 2 Zeichen länger wäre; Bei Eingabe von Peter -> Bytes = 7) hilft auch nichts.



  • eine vorgefertigte funktion zum verschwinden machen von newlines am ende eines strings.. fällt mir im moment keine ein.
    wie wär's derweil mit

    int my_strlen (char const * str)
    {
       return strpbrk(str, "\n ") - str; //hoffentlich stimmt der name der funktion
    }
    //...
    name[my_strlen(name)] = '\0';
    

    behelfsweise...


Anmelden zum Antworten