Winsock (recv) Problem



  • Hallo.
    Ich benutze WinSock2 um Daten per Server-Client Verbindung zu verschicken.
    Nun habe ich das Problem, dass ich mit send () das richtige sende, aber die Funktion recv () etwas empfängt und eine alte Nachricht hinten dran hängt.
    Beispiel:
    // server
    send (client, "wie gehts?", sizeof ("hallo"), 0); // sendet wie gehts? an client

    // client
    char buffer[1024];
    recv (server, buffer, sizeof (buffer), 0); // empfängt daten
    cout << buffer << "\n";

    Das klappt auch soweit ganz gut. Nur wenn ich nach dem "wie gehts?" senden noch ein "hallo" sende, kommt der letzt Teil der alten Nachricht hinten dran (also "halloehts?". Dazu kommen am Ende die kryptischen Zeichen, die immer zufällig sind.
    Wieso speichert das Programm die alten Nachrichten oder liegt das an dem Socket?
    Ich benutze Windows Vista und Dev-C++ (das dürfte eigtl nichts zur Sache tun).
    Vielen Dank im Voraus.

    edit:
    send (client, "wie gehts?", strlen ("wie gehts?"), 0); // sendet wie gehts? an client

    // client
    char buffer[1024];
    recv (server, buffer, sizeof (buffer), 0); // empfängt daten
    cout << buffer << "\n";



  • 1. falsches forum (WinAPI)

    2. da es bei dir aber offensichtlich doch am C++ scheitert (und zwar richtig doll!), solltest du bevor, du weiter mit der WinAPI rumspielst, doch noch mal in den C++-Buch gucken...

    3. Dev-C++ ist veraltet - besorg dir ne anständige IDE

    Des weiteren haben sowohl send als auch recv nen Rückgabewert (die Anzahl der empfangenen/geschriebenen Zeichen).

    Hier gibts auch schon ca. ne halbe Million Threads, wo das schon wer erklärt und gezeigt hat, wie man mit WinAPI ordentlich sendet und empfängt - ich bin aber gerad zu faul, einen zu suchen - vll findest du ja was^^

    bb



  • Vielen Dank für deine kritische, aber schnelle Rückmeldung.
    Ich habe das Problem mittlerweile gelöst.
    Wenn es an meinem C++ scheitert, kannst du mir bitte sagen, was du anders machst, bzw. wie ich mein Wissen verbessern kann.
    Ich arbeite daher mit Dev-C++, weil es schön simpel ist und man trotzdem Spaß am Programmieren hat.
    Bitte belehre mich, sollte ich irren.

    Einen schönen Tag noch
    Mfg DerCoder



  • zum Thema DevCpp schau dir in der FAQ vom Compiler/IDE-Forum mal den entsprechenden Eintrag an.

    zum C++ (bzw. C,denn mehr ist das nicht was du bisher gezeigt hast):
    1) Der Typ von "hallo" ist ein char*, und sizeof() liefert daher die Größe eines Pointers, nicht die Länge des C-Strings den du da übergeben hast. Die Länge eines strings berechnest du

    • In C mit strlen("hallo")
    • in C++ mit std::string("hallo").length();

    (Siehe auch entsprechende C++-Referenz und Tutorials für den Umgang mit String.
    2) Die Parameter von send() sind nicht einfach irgendwas. Der dritte Parameter sagt, wieviele byte gesendet werden sollen. sizeof("hallo") ist 4 (weils ein Pointer ist), strlen("hallo") 5 - beides ist viel kürzer als die Länge des strings den du tatsächlich übergeben hast. Zusammen sieht dein send()-Aufruf leider aus, als ob du ein wenig herumspielst ohne genau zu wissen was du tust, und sowas ist in der Programmierung tödlich.


Anmelden zum Antworten