(Rund um die...) Daten versenden über Socket und TCP



  • Hi,

    wie ist das eigentlich beim Versenden von Daten über Socket und TCP.
    Kann ich davon ausgehen, wenn meine send()-Funktion alle bytes verschickt
    hat, dass diese auch alle wieder so ankommen wie ich sie losgeschickt hab?
    Oder kann es passieren, dass einmal ein paar bits oder gar bytes kippen?

    Theoretisch müsste doch das TCP dafür sorgenn, dass alles richtig ankommt?!?

    Grüsse,
    -insane



  • TCP sorgt dafür, dass die Daten richtig ankommen. Das geht natürlich nicht perfekt, aber die Wahrscheinlichkeit, dass etwas daneben geht, ist sehr sehr gering.



  • naja du kannst sicher gehen indem du den Rückgabewert abfängst. Wenn die anzahl der bytes dann gleich sind, ist nix verloren gegangen:

    /*Client*/ 
    int bytes = send (socket, buffer, sizeof (buffer), 0);
    
    /*Server*/
    int rbytes = recv (...........)
    
    if (rbytes != bytes)
    {
    cout << "Datenverlust" << endl;
    }
    


  • TCP sorgt dafür, dass die Daten genau so ankommen wie sie abgeschickt wurden (es mag zwar extreme exotische Fälle geben in denen der Integritätscheck fehlschlägt, die Wahrscheinlichkeit ist aber unbedeutsam klein).

    Du musst nur aufpassen, wieviel rauskommt, zwei sends von sagen wir je 1000 Bytes müssen nicht auf der Gegenseite durch zwei recv mit je 1000 Bytes ankommen. Da musst du halt auf der empfangssiete eventuell ein wenig checken, ob shcon alles da ist oder ansonsten nochmal recv aufrufen.



  • Und das hat mit Standard-C++ was genau zu tun?


Anmelden zum Antworten