Announcement

Collapse
No announcement yet.

Netzwerk (pufferproblem??)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Netzwerk (pufferproblem??)

    Mit dieser Funktion geb ich eine Netzwerknachricht aus die ich von einem client bekomme...

    Code:
    static void echo(int client_socket)
    #endif
    {
        char echo_buffer[RCVBUFSIZE];
        int recv_size;
        if((recv_size =
                recv(client_socket, echo_buffer, RCVBUFSIZE,0)) < 0)
            error_exit("Verbindugspartner ist gegangen ->");
        echo_buffer[recv_size] = '/0';
        printf("Nachricht: %s \n", echo_buffer);
    
    }

    Mein Problem:
    Wenn ich ein Leerzeichen mitschicke dann gibt er nur bis zu diesem aus.... wie kann ich denk kompletten satz ausgeben ??? oder liegt der fehler garnicht hier ?

    Danke

  • #2
    Wie sendet der Client?
    Christian

    Comment


    • #3
      wie sendet er

      So
      Code:
      echo_string = "irgendeintext"
      send(sock, echo_string, echo_len, 0);

      Comment


      • #4
        und wer belegt echo_len?
        was für ein Typ ist echo_string?
        Christian

        Comment


        • #5
          char echo_string[255];

          echo_len = strlen(echo_string);

          Comment


          • #6
            Nach der Programmierung ist recv_size immer 255, da du offenbar diesen Wert beim Senden ja fest vorgibst.

            Würde das mal ändern und auch nur die tatsächlich relevanten Bytes übertragen. Ob das die Lösung ist weiss ich nicht, sehe nichts was mit einem Leerzeichen zu tun hat.

            Mittels des Debuggers solltest du echo_buffer prüfen, ob die Zeichen nach dem Leerzeichen nicht ankommen oder nach dem ankommen abgeschnitten werden
            Christian

            Comment


            • #7
              Was heißt hier nicht ankommen.... sie werden abgeschnitten und dann in einer neuen Zeile empfangen.... was dann so aus sieht:

              sender:

              sende:Hallo du da

              ______________________

              Empfänger:

              NAchricht von sender: Hallo
              NAchricht von sender: du
              NAchricht von sender: da

              Sprich die kommen in 3 verschiedenen packeten an wenn ich das richtig sehe

              Comment


              • #8
                1. recv(..) muss nicht alles was abgesendet wird auf einmal empfangen. Dazu musst Du den Rückgabewert auswerten (lies in der Doku nach, was er bedeutet).
                2. Da oft nur partielle Daten empfangen werden mit einem recv(..) Aufruf, wird ein null- terminierter String plötzlich nicht mehr null- terminiert. Du musst Dich um Bytes kümmern, nicht um Strings. Die Strings sind erst dann da, wenn die Daten vollständig übertragen sind (was mehrere recv(..) Aufrufe benötigen kann).

                Simon

                Comment

                Working...
                X