C++ , Send () - Funktion sendet zusätzliche bytes

Ich habe ein Problem mit einer Winsock2-wrapper-Klassen (client-server) und nach unzähligen Stunden kratzen-meinen-Kopf-in-die Verwirrung, beschloss ich, es wäre besser, wenn ich bat um Eure Meinung.

Um genauer zu sein, das problem ist, dass jedes mal, wenn ich meine Send () - Funktion, sowohl der client und der server (nicht immer!) senden Sie ein oder zwei zusätzliche bytes!

Beispielsweise verwende ich SendBytes("Hallo") und die Recv-Funktion liefert "Hallo•" mit einem '•' oder andere zufällige Zeichen am Ende des Zeichen-array.

    //main.cpp (Client)
    #include "Socket.h"

    int main() 
    {
        NetworkService::Client cService = NetworkService::Client();
        int res = cService.Initialize("127.0.0.1","20248");
        if(res == 0){
            int local = cService.SendBytes("Hello!");
            printf("Bytes Sent: %ld\n", local);
            cService.Shutdown();

            char* temp = cService.Recv();
            printf("String Recieved: %s  - Size: %d",temp,strlen(temp));
            printf("\nSTRLEN: %d",strlen("X5"));
        }
        else{
            cService.Clean();
        }
        cService.Close();
        while(!kbhit());
        return 0;
    }

Natürlich, sendet der server den string "X5" und der Kunde druckt die strlens ...

//The result with "X5" as the dummy text:  
String Recieved: X5? - Size: 3 //Notice the extra '?' character  
STRLEN: 2

Senden //Empfangen Funktionen

    int NetworkService::Client::SendBytes(char* lData){
            int local = send( ConnectSocket, lData, (int)strlen(lData), 0 );
            if (local == SOCKET_ERROR) {
                Close();
                return WSAGetLastError();
            }
            return local;
    }

    char* NetworkService::Client::Recv(){
        recv(ConnectSocket, recvbuf , recvbuflen, 0);
        return recvbuf;
    }

Hilfe würde geschätzt ^_^.

  • Sie sind nicht die Entsendung der terminierenden NULL-byte in der Zeichenfolge.
  • Vielen Dank für die Beantwortung so schnell! Heres die Sache , ich fügte hinzu, '\0' am Ende von string , aber es hat nichts. Ich bekomme immer noch zufällige Einfügungen.
  • Sie haben bereits einen impliziten \0 gibt es durch die string-literal. damit Sie gesendet werden, obwohl, müssen Sie zum anpassen der Größe-parameter in der send () - Aufruf. ändern Sie es von strlen(L Daten) zu strlen(L Daten)+1 um die abschließenden \0. werden Sie sicher, dass die strlen() - Funktion, wenn Sie immer noch unsicher, warum dies notwendig ist.
  • Es ist nicht wirklich notwendig ,ich benutzte es vor zu vergleichen, die Länge des langen strings , weil ich Durcheinander mit dem Problem mit mehr als 2 byte-strings. Ich denke, (L Daten)+1 funktionieren wird , danke ich werde es versuchen!
InformationsquelleAutor Christian | 2011-09-10
Schreibe einen Kommentar