Winsocket, Daten versenden ?
-
Hi, so mal shcnell ne Frage:
Ich versende im Moment meine Dateien folgender MAßen üer das NEtzwerk:
Ich erstelle eine Server/Client Anwendung, connecte usw..
So nun hab ich eine Verbindung, und versende meine Datei.. (4,9 mb)
So wenn ich die komplett einlese und vershcicke kommt nix an... ich nehme an, das liegt daran das die Sockets so viel nicht verarbeiten können odeR ?
Naja, wie verschickt ihr die daten mit Sockets ? Oder war meine Idee richtig nur falsch durch geführt ? Ich glaube Code ist an dieser Stelle nicht wichtig...Gruß Chris
-
hola
erstens kennt C++ keine sockets. eventuell wenn du boost::asio verwendest das es hier noch her passt, ansonsten OS abhaengig. welches OS verwendest du?
Foxx90 schrieb:
So wenn ich die komplett einlese und vershcicke kommt nix an
irgendwas muesste auf jeden fall ankommen.
ohne sourcecode oder glaskugel wird man dir nicht helfen koennen.
hast schon alle rueckgabewerte ueberprueft ?Meep Meep
-
Also, erstmal verwende ich WinXp, das Problem ist ja wenn die Buffergröße nicht größer ist als 4096 dann kommt ja alles an ohne Probleme.. jetzt hab ich daran gedacht die Datei aufzusplitten... und dann immer in 4096 byte Stücken zu schicken...
Danke schonmal
-
Foxx90 schrieb:
jetzt hab ich daran gedacht die Datei aufzusplitten... und dann immer in 4096 byte Stücken zu schicken...
wenn ich mich nicht irre ist die std-maximalgroesse der paketgroesse 1536 Bytes.
sobald du mehr versendest, splittet das OS automatisch die daten auf mehrere pakete auf.mach dir ein kleines protokoll.
als erstes schickst die dateigroesse usw an den zielrechner, damit er weiß wann schluss ist.
dann schickst ne definierte anzahl an paketen rueber. z.b. 3.
dann wartest du darauf, das dir die gegenseite eine quittung schickt das es die pakete erhalten hat.
und dann schickst du wieder ein paar pakete.
das machst so lange bis die datei drueben ist.Meep Meep
-
Meep Meep schrieb:
mach dir ein kleines protokoll.
als erstes schickst die dateigroesse usw an den zielrechner, damit er weiß wann schluss ist.
dann schickst ne definierte anzahl an paketen rueber. z.b. 3.
dann wartest du darauf, das dir die gegenseite eine quittung schickt das es die pakete erhalten hat.
und dann schickst du wieder ein paar pakete.
das machst so lange bis die datei drueben ist.Meep Meepbin zwar nicht der OP aber war eben auch mal ein bisschen interessiert

das hört sich so für mich schon ein bisschen komplizierter an...
könntest du so ein protokoll mal kurz skizzieren? und was ich mich auch frage: wer garantiert dir, dass send immer gleich viel versendet? muss vielleicht unterschiedlich oft aufgerufen werden, um 3 pakete zu versenden.
-
<----> schrieb:
wer garantiert dir, dass send immer gleich viel versendet? muss vielleicht unterschiedlich oft aufgerufen werden, um 3 pakete zu versenden.
garantieren kann es niemand. jedoch bekommst du die versendete groesse ja mitgeteilt. haette anstatt x pakete auch sagen koennen das er x bytes verschicken soll. kommt aber mehr oder weniger auf gleiche an.
ich hab mir im laufe der zeit angewoehnt, das ich mir die pakete selbst zusammen stelle und mir die groesse/paket selber ausrechne, weil vielleicht bei jedem paket noch ein spezieller header dabei sein koennte.so ein protokoll koennte folgend aussehen
CLIENT SERVER nachricht schicken das ein datei gesendet wird. eventuell mit name oder sonstigen infos. sendet ok oder nicht ok. eventuell auch noch andere infos. neuer port oder so. schreibt in den ersten x bytes wieviele bytes geschickt werden. empfangt das erste datenpaket. liest die ersten x bytes aus und weiß somit wieviel empfangen werden muss. wenn alles empfangen wurde, paket schicken mit ok. schickt nun die naechsten x bytes. das gleiche spiel also nochmaldas macht man dann solange bis alles geschickt worden war.
so ungefaehr koennte das schema aussehen.
Meep Meep
-
ok danke für die eläuterung

-
Hmm gute Idee, wird nur ziemlich kompliziert wenn man multiclient unterstützen will, xD^^ Also ich dachte nämlich immer das man send() einen buffer egal welcher größe übergeben kann, und die funktion splittet das dann selbst auf ... aber das is schon ne gute Idee, mit Protokol schreiben meinst du wohl den Ablauf ansich
Oder eine Klasse oder ähnliches odeR ?Gruß Chris
-
mit protokoll meinte ich keine klasse, sondern eine vorgehensweise an die sich alle beteiligten halten muessen.
ob du die funktionalitaet in globale funktionen packst, klassen dafuer schreibst bleibt dir ueberlassen.Meep Meep