TCP Socket auf Daten prüfen
-
hey,
ich habe folgendes Problem:
ich habe einen Tcp client geschrieben welcher erst eine Nachricht sendet und eine Nachricht per recv() Empfängt jedoch ist mein Problem das wenn den Clienten keine Nachricht gesendet wurde er so lange wartet bis eine da ist.
Also wie kann man in C++ Prüfen ob überhaubt eine Nachricht gesendet wurde damit ich erst dann recv ausführe damit der client nicht freezed.
mfg anonymus
-
Mit C++ ? An sich das falsche Forum ..
Mit WinAPI ? Da hast du zwei Möglichkeiten. Erstmal könntest du das recv () in einen Thread packen, damit würde dein Programm nicht einfrieren, andereseits kannst du dir auch die Funktion select () angucken
Wobei du zumindest theoretisch so auch mit C++ weiterkommen kannst.
-
ne mit Threads wollte ich nicht arbeiten und jetzt habe ich es mit select ausprobiert aber es geht irgentwie nicht da er immernoch bei revc hängenbleibt...
while(rc!=SOCKET_ERROR) { cout << endl << "Zeichenfolge eingeben [max 256]: "; gets(buf); send(s,buf,strlen(buf),0); FD_ZERO(&fdSet); // Inhalt leeren FD_SET(s,&fdSet); // Den Socket der verbindungen annimmt hinzufügen rc=select(0,&fdSet,NULL,NULL,NULL); // nicht vergessen den ersten parameter bei anderen betriebssystem anzugeben if(rc==SOCKET_ERROR) { cout << "Fehler: select, fehler code: " << WSAGetLastError() << endl; return 1; } if(FD_ISSET(s,&fdSet)) { rc=recv(s,buf,256,0); if(rc==0) { cout << "Server hat die Verbindung getrennt.." << endl; break; } if(rc==SOCKET_ERROR) { cout << "Fehler: recv, fehler code: %d\n" << WSAGetLastError() << endl; break; } buf[rc]='\0'; cout << endl << "Server antwortet: %s" << buf << endl; } }mfg anonymus-Hans
-
Nein, jetzt bleibt er bei select() hängen.

Wenn du schon synchron arbeiten willst, dann musst du blocken eben akzeptieren. Wenn du asynchron arbeiten willst, nimmst du am besten Overlapped I/O, dann geht dein Programm flüssig weiter.
-
es geht nicht nur, nicht flüssig sondern hängt immer für einige zeit...
-
sry für doppelpost, hab das problem jetzt gelöst.
danke für die Hilfe
euer anonymus-Hans
-
Schön, dass du uns auch sagst, wie.
-
sry,
ich habe mich für einen Thread entschieden

mfg anonymus-Hans