Sockets TCP/IP wieviel auf einmal empfangen/senden



  • ;fricky schrieb:

    socke schrieb:

    ;fricky schrieb:

    socke schrieb:

    Die Nachricht wird also immer nur dann zerstückelt, wenn sie nicht mehr in den Puffer bzw. die "window size" passt. client.send("start") sollte also immer ganz ankommen, wenn ich vorher alles ausgelesen hab. Stimmt das so oder gibts da noch andere Fälle?

    nee, es gibt noch andere gründe, warum die daten zerstückelt werden können.

    Welche?

    verschiedene, z.b. könnte sich tcp entschliessen kleinere paket zu senden, weil die verbindung schlecht ist, oder es schickt pakete mit nur einem einzelnen nutzdaten-byte als probes, weil die gegenstelle 'window size=0' gemeldet hat. bestimmt gibts noch ein paar gründe mehr. langer rede kurzer sinn: du kannst *niemals* davon ausgehen, dass TCP dir die daten nicht auseinanderfleddert. ausser du implementierst ein eigenes TCP, dass nie weniger als x bytes sendet (oder du schaust mal, welche QoS-einstellungen dein system bietet).
    🙂

    Ich hab jetzt schon ne Weile mit der einfachen Send->Recv Methode gearbeitet und es hat eigentlich immer gut funktioniert bei kurzen Befehlen, nur ne große Datei ging es so nicht, da musste ich die größe mit senden und dann solange lesen bis alles da war. Hat das bei den kurzen Befehlen so gut funktioniert, weil ich nur im LAN war? Gibts eigentlich kein einfaches Protokoll bei dem man auf nichts aufpassen muss? Einfach nur send->recv und dann ist alles da, oder timeout.



  • ^^wieso ist das stückeln für dich ein problem? TCP ist nunmal nicht echtzeitfähig, dafür stellt es aber einiges an, damit daten sicher ankommen. eine einfache methode wäre z.b.: verbindung aufmachen - kommunizieren - verbindung schliessen. ein erfolgreiches schliessen der verbindung (das mit beiderseitigem einverständnis geschieht), bedeutet für beide partner mit, dass alles angekommen ist.
    🙂



  • ;fricky schrieb:

    ^^wieso ist das stückeln für dich ein problem?

    Weil ich mit halben Befehlen nix anfangen kann.

    TCP ist nunmal nicht echtzeitfähig, dafür stellt es aber einiges an, damit daten sicher ankommen. eine einfache methode wäre z.b.: verbindung aufmachen - kommunizieren - verbindung schliessen. ein erfolgreiches schliessen der verbindung (das mit beiderseitigem einverständnis geschieht), bedeutet für beide partner mit, dass alles angekommen ist.

    Wieso schliessen? Ich schick nen Befehl und warte auf Antwort, wenn die nicht innerhalb einer bestimmten Zeit kommt, hat es nicht funktioniert und dann kann ich abbrechen. Sind keine lebenswichtigen Daten die da gesendet werden.



  • socke schrieb:

    ;fricky schrieb:

    ^^wieso ist das stückeln für dich ein problem?

    Weil ich mit halben Befehlen nix anfangen kann.

    keine sorge, der rest kommt ja auf jeden fall nach kurzer zeit hinterher.
    🙂



  • socke schrieb:

    ;fricky schrieb:

    ^^wieso ist das stückeln für dich ein problem?

    Weil ich mit halben Befehlen nix anfangen kann.

    Ja dann lies halt ganze Befehle um Himmels willen!
    Ich check echt nicht was alle immer ein Problem damit haben, dass TCP/IP ein Byte-Stream ist, und nicht ein Message-Stream.
    Ist doch genau dasselbe wie wenn du von Standard-In liest und nach Standard-Out schreibst.

    nur ne große Datei ging es so nicht, da musste ich die größe mit senden und dann solange lesen bis alles da war

    Rate mal was: 💡 das gleiche System kannst du mit kleinen Datenstücken auch verwenden. 💡



  • hustbaer schrieb:

    socke schrieb:

    ;fricky schrieb:

    ^^wieso ist das stückeln für dich ein problem?

    Weil ich mit halben Befehlen nix anfangen kann.

    Ja dann lies halt ganze Befehle um Himmels willen!
    Ich check echt nicht was alle immer ein Problem damit haben, dass TCP/IP ein Byte-Stream ist, und nicht ein Message-Stream.
    Ist doch genau dasselbe wie wenn du von Standard-In liest und nach Standard-Out schreibst.

    Machst du da auch ne Schleife rum, um nen String zu lesen bzw. schreiben?

    nur ne große Datei ging es so nicht, da musste ich die größe mit senden und dann solange lesen bis alles da war

    Rate mal was: 💡 das gleiche System kannst du mit kleinen Datenstücken auch verwenden. 💡

    Ach ne 🙄







  • Machst du da auch ne Schleife rum, um nen String zu lesen bzw. schreiben?

    das stichwort heißt kapseln.



  • Benutz doch sctp. Das schickt Pakete wie Udp und sichert vore deren Verlust und deren Reihenfolge wie TCP.



  • Tyrdal schrieb:

    Benutz doch sctp. Das schickt Pakete wie Udp und sichert vore deren Verlust und deren Reihenfolge wie TCP.

    ^^wozu ist das gut? dann kann man doch gleich TCP nehmen?
    🙂


Anmelden zum Antworten