zuviele Zeichen übertragen



  • Wie schon in meinem anderen Thread erwähnt spiele ich ein bisschen mit UDP. Im Prinzip habe ich ein einfaches Client-Server-Modell. Wenn ihc nun einen String übertrage, werden (in der einen Richtung) immer 2 Zeichen zuviel übertragen.

    Hier Codeauszüge:

    // im Client
    char request[] = "Ist jemand da?";
    sendto(mSock, request, strlen(request), 0, (SOCKADDR*)&mAddrRequest, sizeof(SOCKADDR_IN));
    // ...
    char response[1024];
    recvfrom(mSock, response, 1024, 0, (SOCKADDR*)&mAddrResponse, &mAddrResponseLen);
    cout<<response<<" von "<<mAddrResponse.sin_addr.s_addr<<endl;
    
    // im Server
    char incomingRequest[1024];
    recvfrom(mSock, incomingRequest, 1024, 0, (SOCKADDR*)&mAddrResponse, &mAddrResponseLen);
    cout<<strlen(incomingRequest)<<": "<<incomingRequest<<" von "<<mAddrResponse.sin_addr.s_addr<<endl;
    sendto(mSock, incomingRequest, strlen(incomingRequest), 0, (SOCKADDR*)&mAddrResponse, mAddrResponseLen);
    

    Wenn nun der Client seine 14 Zeichen an den Server schickt, kommen bei diesem 16 Zeichen an. Diese schickt er zurück und beim Client kommen dann genau diese 16 Zeichen an.



  • Zufall. Strlen gibt die Länge eines nullterminierten Strings zurück. recvfrom nullterminiert Deinen Datenblock aber nicht. Demnach "sucht" strlen solange weiter nach dem Stringende, bis es zufällig auf eine 0 im Speicher stößt.

    Du musst den Rückgabewert von recvfrom auswerten, um den String selbst nullzuterminieren.



  • Alles klar, danke!


Log in to reply