Winsocket Problem
-
Also, ich habe einen Server und einen Clienten :
(Datenübermittlung)Server:
1. Recv -> wartet auf Daten
2. Schreibe Dateien in den ofstreamClient:
1. Liest Daten aus dem ifstream
2. sende sie an den Server------------------------------------
Das ganze funktioniert wunderbar im lokalen Netzwerk...
Mit guter Geschwindigkeit ... aber im Internet überhaupt
nicht ... Port sind freigegeben... Ich weiß ohne code könnt ihr
mir wenig helfen ich will eher ne theoretische lösung ?! muss vlt
ein gewisses timing eingehalten werden ? also darf man z.b. nicht schneller als
jede millisekunde mit send verschicken im inet oder is das egal ?
wenn ich das mit bestätigungen mache klappt das auch im internet!
Also wenn ich erst daten schicke an den Server und dann als Client
erst ne empfangsbestätigung abwarte um den nächsten block zu schicken ... aber
das is leider nur halb so schnell wie mein inet upload : etwa 10 - 11 kb/s also was kann man da machen ? ich hab auch schon überlegt nur für jedes 10 paket ne
bestätigung zu schicken aber dann fehlen iwie zwischen durch welche ?! jedes paket ist 1024 bytes groß.... Danke für Hilfe und sorry für die lange Fehlerbeschreibung!!Gruß Chris

-
Hm, also ich hab bisher noch keine Unterschiede zwischen LAN und INet gemerkt
Andererseits, wenn du am laufenden Band Daten schickst, könnte irgendwann der Socket überfordert sein, der die Pakete nicht schnell genug durch die Leitung schicken kann.Schickst du denn laufend Daten rüber oder nur stückweise? Sonst könntest du auch alle 100 Pakete (je nach Größe und Durchsatz) eine Empfangsbestätigung einbauen.
-
Naja, ich schicke in einer Endlos Schleife andauernd 1024 byte Pakete ins Netz .... kann schon seien dass das überlastet ist ?! Ich hatte dieses Problem im lokalen Netzwerk noch nicht ... hmm ich dachte schon an ein Sleep(1) aber iwie wiederstrebt es mir die übertragung absichtlich abzubremsen ?!
-
Ja, ein Sleep wäre eine etwas unkoordinierte (und ziemlich ineffiziente) Lösung
Na mit so einer Endlosschleife ist es dann doch kein Wunder. Probiers doch mal, dass du alle 100 Pakete vom Server eine Bestätigung schickst und auf Client-Seite nach 100 gesendeten Paketen auf die Bestätigung wartest
-
aber diese 100 pakete sollen in eienr endlos schleife geschickt werden ?
und 2 frage: blockiert send() so lang bis die daten verschickt wurden ? also das is natürlich nur im mikroskeunden bereich oder is diese funktion überhaupt nicht blockierend ?und eine 3. frage :
soll ich ein struct machen ? so hab ichs im mom oder lieber ein char array ? ich hab zur zeit ein struct:struct Package { char Data[1023]; int BufferSize; };BufferSize enthält die anzahl an bytes die in dem buffer stehen ...es könnten ja theoretisch am schkluss auch nur die ersten 300 bytes ausgelesen werden müssen wenn man ende der datei ist... naja danke shconmal
-
Foxx90 schrieb:
und 2 frage: blockiert send() so lang bis die daten verschickt wurden ? also das is natürlich nur im mikroskeunden bereich oder is diese funktion überhaupt nicht blockierend ?
send() ist eine blockende Funktion.
-
hmm mal ne frage : wennn durch recv von einem socket gelesen wird... kann dann dieser socket parallel mit send beschrieben werden ? oder is der in der recv phase gesperrt für alles andere ?