Puffergröße Dateiserver
-
Diese recv hab ich gemacht, damit der Server wartet bis zum nächsten Senden, da es den gleichen Fehler (Pufferüberlauf?) gab wie oben beschrieben.
-
So, hab das recv in der SendFile bzw. das send in der LoadFile-Funktion jetzt entfernt und das klappt soweit wunderbar.
Das
else if (rstate != sizeof(rdata)) { cout << rstate << ' ' << sizeof(rdata) << '\n'; cout << "Fehler: unerwartetes Dateiende.\n"; break; }hab ich natürlich auch entfernt, da nicht 512 Bytes empfangen werden, sondern was halt reinkommt.
Hab noch ein sleep nach der Schleife reingehaun damit sich die Daten der Datei mit der nächsten Nachricht nicht vermischen.
Hatte das Prinzip irgendwie nicht verstanden, aber jetzt tu ichs, danke für die Hilfe!
-
Hab noch ein sleep reingehaun damit sich die Daten der Datei mit der nächsten Nachricht nicht vermischen.
WTF?
-
Hab noch ein sleep reingehaun damit sich die Daten der Datei mit der nächsten Nachricht nicht vermischen.
OMG
-
SPAMT nicht rum, wenn ihr was konstruktives beizutragen habt, tut es, oder lasst es sein.
Ich geh mal davon aus, dass ihr den Beitrag missverstanden habt.
Das sleep ist hinter der Schleife, wo soll es auch sonst sein?
Das Ding läuft übrigens auf Linux.Anders würde die nächste Nachricht, sprich der nächste Dateieintrag noch in die Datei geschrieben werden. Man könnte es natürlich auch ohne sleep realisieren, indem man vor dem Schreiben einfach abfrägt, wieviel Daten überhaupt noch benötigt werden. Den Überschuss könnte man an die Funktion servercmd schicken.
-
Du solltest durch die Reaktionen aber mitbekommen haben, dass
Sleep()keine Lösung ist - egal, ob win oder unix/linux oder was weiß ich nich noch - nat. solltest du das iwie abfragen...
-
Cypog schrieb:
SPAMT nicht rum, wenn ihr was konstruktives beizutragen habt, tut es, oder lasst es sein.
Ich geh mal davon aus, dass ihr den Beitrag missverstanden habt.
Geh aus wovon du willst.
Das sleep ist hinter der Schleife, wo soll es auch sonst sein?
Das Ding läuft übrigens auf Linux.Anders würde die nächste Nachricht, sprich der nächste Dateieintrag noch in die Datei geschrieben werden. Man könnte es natürlich auch ohne sleep realisieren, indem man vor dem Schreiben einfach abfrägt, wieviel Daten überhaupt noch benötigt werden. Den Überschuss könnte man an die Funktion servercmd schicken.
Ich hab das schon richtig verstanden, du bist nicht der erste der diesen Fehler macht. Und ich programmiere mit Sockets, im gegensatz zu dir, nicht erst seit ein paar Tagen.
sleep() als Lösung für solche Probleme ist grundsätzlich ein Fehler. Bei Sockets kann es z.B. passieren, dass entweder der Empfänger, oder die Netzwerk-Leitung, so langsam ist, dass beim Empfänger trotz des sleep() alles auf einmal ankommt. D.h. es würde erst nicht funktionieren. Zu testen ist sowas natürlich schwer, da man solche worst-case Situationen schwer absichtlich herbeiführen kann. Im Betrieb wird es sich aber früher oder später ergeben.
Die korrekte Lösung ist auf der Empfänger-Seite selbst mitzuzählen, und dann recv nur soviel als Puffergrösse zu übergeben, wie man maximal empfangen will. Dadurch muss man auch nichts an irgendwelche anderen Funktionen weitergeben, da die weiteren Daten noch im Socket-Puffer stehen bleiben.
Und ob das ganze unter Windows, Linux oder sonstwas läuft, ist vollkommen egal. Keine Ahnung wie du darauf kommst es könnte einen Unterschied machen.
-
Dann schreibt nicht sowas sinnloses wie OMG oder WTF, was soll ich mir da denken?
sleep war eigtl. nur als Zwischenlösung gedacht. (soweit ich weiß reagiert das linux sleep anders als das windows Sleep, was in dem Fall aber keine Rolle spielt)
Das Problem mit der langsamen Leitung ist hier sehr unrealistisch, da eine gute Netzwerkleistung für das Nutzen des Dienstes Vorraussetzung ist.
Und ob das ganze unter Windows, Linux oder sonstwas läuft, ist vollkommen egal. Keine Ahnung wie du darauf kommst es könnte einen Unterschied machen.
In dem Fall ist es egal, aber ich kann ja nicht duch ein "WTF" mir denken, welches Problem du meinst.
Die korrekte Lösung ist auf der Empfänger-Seite selbst mitzuzählen, und dann recv nur soviel als Puffergrösse zu übergeben
Alles klar, werd das so machen, danke
-
Cypog schrieb:
Das Problem mit der langsamen Leitung ist hier sehr unrealistisch, da eine gute Netzwerkleistung für das Nutzen des Dienstes Vorraussetzung ist
OMG ^^
-
Cypog schrieb:
Dann schreibt nicht sowas sinnloses wie OMG oder WTF, was soll ich mir da denken?
Gut dann schreib ich das nächste mal garnix. Mir kanns ja egal sein was du zusammenprogrammierst.
-
Cypog schrieb:
Das Problem mit der langsamen Leitung ist hier sehr unrealistisch, da eine gute Netzwerkleistung für das Nutzen des Dienstes Vorraussetzung ist.
Heute, zum Beispiel, ist anscheinend in Paris ein zentraler Server ausgestiegen, wodurch gewisse Teile des Netzes nur verlangsamt erreichbar wurde. Das Problem war zwar innert Minuten behoben, doch das Netz war langsamer, gewisse Webseiten konnte ich sogar gar nicht mehr erreichen.
Wenn du also sowas voraussetzt, dann schliesst du jeden Internetnutzer aus

Und wenn du nun sagst, dass dein Programm nur in einem privaten oder geschäftlichen Netzwerk läuft, dann kann ich dir sagen, dass es dort genausogut zu Verzögerungen oder Staus kommen kann. Mag mich da an ein paar Berichte von meinem Vater aus der Novartis erinnern.Verlasse dich nie auf das Netzwerk.
Grüssli
-
DER THREADERSTELLER IST EIN FOLLIDEOT
-
Ich weiß schon, was du meinst.
Stimmt schon.
Kommt es zu diesem Problem, passiert auch nix, dann lädt derjenige sich das nochmal. Es geht auch nix kaputt dadurch

Sollte die Verbindung wirklich so schlecht sein, kann man die Dateien sowieso nicht nutzen, da es Dateien sind, die man fürs Spielen für ein Multiplayer Spiel braucht (Der Gameserver befindet sich auf dem selben Server)Da es sowieso nur eine schnelle Lösung war und ich das Programm wie beschrieben umbaue, spielt das eh keine Rolle mehr.
@unskilled:
Leute! Wenn ich schreibe, dass das Vorraussetzung ist, dann stimmt das auch und eure kindischen Kommentare könnt ihr euch sonst wohin stecken.
Wie hoch ist das durschnittliche Alter hier?@hustbaer:
Du widersprichst dir selber:
Zuerst schreibst du "WTF", womit ich überhaupt nichts anfangen kann.
Dann schreibst du mir wirklich hilfreiche Tipps, wofür ich dir dankbar bin.
Und jetzt beschwerst du dich, dass ich mit deinem Kommentar nix anfangen kann?
Also entweder willst du mir helfen oder nicht OoHier sollte mal ein Moderator die ganzen sinnlosen Kommentare löschen...
-
selten sowas dummes gelest
-
Cypog schrieb:
Kommt es zu diesem Problem, passiert auch nix, dann lädt derjenige sich das nochmal. Es geht auch nix kaputt dadurch

Ja, wenn das ein Programmierer so festlegt und ich dessen Programm verwende, dann bekomme ich manchmal eine Mordlust. Der User wird dir dafür jedenfalls sicher nicht danken und der Wertung deines Programmes würde es auch nicht gut tun. Und Imagepflege, bzw. Marketing, ist sehr wichtig bei der Vermarktung

Cypog schrieb:
Da es sowieso nur eine schnelle Lösung war und ich das Programm wie beschrieben umbaue, spielt das eh keine Rolle mehr.
Naja, doch. Wir haben hier oft Leute, welche den Tipps brav folgen, Code umschreiben, verbessern usw. usf., im Endeffekt aber gar nicht verstanden haben, wieso das alles besser ist. Wir wollen hier schliesslich einen Lerneffekt erzielen

Und das mit den etwas seltsamen Kommentaren, nimm es einfach ein bisschen lockerer. Die meisten sind nicht böse gemeint und wenn sie es sind, dann ist meistens der Autor etwas unterblichtet und behinderten Leuten sollte man ja mit Rücksicht begegnen.
Aber hier liest man manchmal so viel seltsames Zeug, gerade auch so ein aktives Mitglied wie hustbaer oder unskilled, dass einem zum Teil wirklich nur noch ein WTF in den Sinn kommt. Da braucht man dann Zeit, um seine Gedanken wieder zu sammeln

Grüssli
-
@Cypog:
Bleib mal etwas lockerer, immerhin sagst du selbst dass du hier hilfreiche Antworten bekommen hast.
Was den Rest angeht: fass dir mal an die eigene Nase, dein Ton ist auch nicht sonderlich freundlich.Du unterstellst auch wiederholt dass andere die dir antworten nix verstehen und kindisch sind und wahrscheinlich noch in die Windeln pissen. Damit macht man sich keine Freunde.
Was das "WTF?" sollte? Ganz einfach: für mich hat das so geklungen, als ob du das für eine gute Lösung halten würdest. Und das kann ich nur mit einem "WTF?" quittieren, da es eine denkbar dumme und kurzsichtige Lösung ist.
Wenn ich schreibe, dass das Vorraussetzung ist, dann stimmt das auch und eure kindischen Kommentare könnt ihr euch sonst wohin stecken.
Genau sowas meine ich. Nicht freundlich, und noch dazu grober Unfug.
Um es in deinen Worten zu sagen: wenn ich dir sage, dass das falsch ist, und daneben gehen kann, dann kannst du das ruhig glauben. Ein Programm welches auf ein bestimmtes Timing angewiesen ist, um korrekt zu funktionieren, ist kein Programm, sondern ein Scheisshaufen.
-
hustbaer, du brauchst mir wirklich nicht erzählen, dass ich unfreundlich reagiere, wenn ich sowas lesen muss:
OMG
WTF
DER THREADERSTELLER IST EIN FOLLIDEOT
selten sowas dummes gelestSoll ich mich etwa für solche Kommentare bedanken?
Für mich ist das Thema seit einer Seite abgeschlossen, aber irgendwer, und damit mein ich nicht Dravere, muss wohl immer seinen Senf dazu geben.
Oja, ich hab lediglich geschrieben, dass mein Beitrag missverstanden wurde und nicht behauptet, dass das deine Schuld war, vielmehr war es meine, weil ich mich nicht deutlich ausgedrückt hab, also brauchst du dich doch gar nicht beschweren oder angegriffen fühlen ;), tut mir leid wenns so rüberkam
-
Cypog schrieb:
Für mich ist das Thema seit einer Seite abgeschlossen
dann mach ich doch mal zu.

jetzt kriege ich zwar haue, aber die kriege ich eh regelmäßig, ob ich was anstelle oder nicht.