winsock: empfangen nach senden Pflich??
-
hm...
Wieso muss man nach dem Senden von Daten sofort empfangen?Also sowas:
Client: rc=send(s,buf,strlen(buf) + 1,0); rc=recv(s, buf,256,0); Server: char * buf = new char[256]; rc=recv(connectedSocket,buf,256,0);
so kommt beim Server alles wunderbar an.
Wenn ich das "rc=recv(s, buf,256,0);" im Client weglass,
sickert beim Server nur Datenmüll aus der Leitung...Was mich z. B. auch wundert is, dass man, soweit ich
die MSDN mit meinen verstümmelten Englischkenntnissen verstanden hab,
nur eine bestimmte Datenmengeauf einmal senden kann.
Is aber irgendwie dumm, dass man dann ned einfach 20mal hintereinander
send() aufrufen kann, sondern immer dazwischen eine Antwort empfangen muss.und wie ich auch grad noch festell,
kann man auch ned zweimal hintereinander empfangen, ohne dazwischen zu senden...lieg ich da mit meinen Beobachtungen richtig?
thx
MartinPS: seh die Sockets grad zum ersten Mal.
-
@anonymus, komisch. Eigendlich sollte man auch ohne recv senden können. Ich würde mal darauf tippen, dass es an etwas anderem als an dem recv liegt. Kannst du mal den gesamten Code posten ( falls es nicht zuviel ist
).
-
Hm...
Langsam glaub ich auch, dass ich da wo anders Sch... baut hab.
Hab etz 3 verschiedene Fälle:
- siehe oben
- geht wunderbar
- Client wird zu schnell beendet. Wenn ich nach send() ein Sleep() setzte geht's
Vielleicht sollt ich des erst mal von Grund auf überarbeiten,
bevor ich da jetzt anfang irgendwelchen Spaghetti-Code zu PostenAber zumindest weiss ich jetzt mal, dass meine obige Annahme falsch war und ich
somit ein exaktes Ziel vor Augen habso long
Martin
-
@anonymus,
so sollte eigendlich der Ablauf bei dir aussehen.CLIENT
(1) Socket erstellen (socket)
(2) verbindet sich mit Server (connect)
(3) Daten an Server senden (send)
(4) Antwort auslesen (recv) +++ OPTIONAL +++
(5) --> weiter mit Punkt 3SERVER
(1) Vorbereitung (socket/bind)
(2) Auf Client warten (listen)
(3) Client annehmen (accept)
(4) Anfrage auslesen (recv)
(5) Antwort senden (send) +++ OPTIONAL +++
(6) --> weiter mit Punkt 2
-
Eigentlich bild ich mir ein, dass ich's so gemacht hab...
Najo, aber jetzt läufts *freu*
Danke
Martin
-
@anonymus
Generell ist es auch wichtig, welches Protokoll dahintersteckt. Manche Protokolle erfordern, dass z. B. auf gesendete Daten eine Art OK folgt (meistens in Verbindung mit einer Checksumme o. ä.).