[Socket-Chat] gleichzeitig empfangen und senden?
-
Also ich habe mich jetzt mal mit Sockets beschäftigt und mir dazu diese Seite angeschaut. Naja, jetzt wollte ich mal ein kleines Chat-Programm (konsolen-basiert) schreiben.
Aber da brauche ich wohl einen Denkanstoß. Bis jetzt stehe ich vor folgendem Problem:
Wenn ein Client zur Texteingabe aufgefordert wird, kann er in dieser Zeit keine Daten empfangen. Aber das wesentlich an einem Chat ist ja, dass man Daten empfangen kann und dann darauf antwortet. Aber solange bei mir gets(text); läuft (damit der Benutzer seinen Text eingeben kann), ist alles andere blockiert und ich kann recv() logischerweise nicht aufrufen.
Andersrum ist das Problem natürlich das gleiche, während ich auf Daten warte kann ich nichts eintippen und absenden.
Ich hoffe ihr könnt mir da weiterhelfen. Kann ich die zwei funktionen vielleicht irgendwie "fast gleichzeitig" laufen lassen? Gibt's dafür vielleicht sowas ähnliches wie select()?
-
HI,
Hilft dir nicht viel, aber das selbe problem habe ich auch...
MFG AmEnde
-
Threads, WSAAsyncSelect...
-
Na, danke schonmal für die Antwort.
Aber gibt es vielleicht irgendwo ein Beispiel-Code, in dem die Vorgehensweise von WSAAsyncSelect demonstriert wird? In die MSDN hab ich schon reingeschaut, aber ein kleines Beispiel fände ich nicht schlecht. Also falls da zufällig einer nen Link hat ...
-
Sorry, habe jetzt selbst was gefunden: http://www.ragestorm.net/tutorial?id=12
Also man benutzt das ganze wohl folgendermaßen:#define WM_READYTORECV (WM_APP + 100) //Neue Message ... WSAAsyncSelect(s, hwnd, WM_READYTORECV, FD_READ); // Wenn es was zum Lesen gibt wird WM_READYTORECV and hwnd gesendet ... case WM_READYTORECV: // Es wurde was gesendet - also können wir jetzt abfragen rc=recv(s,szBuffer,256,0); MessageBox(hwnd, szBuffer, "Meldung", MB_ICONINFORMATION | MB_OK ); break;Jo, das war's eigentlich. Hoffe das hilft denen, die das gleiche Problem haben.
mfg Progamer
-
Für WSAAsyncSelect hab ich ehrlich gesagt noch nie ein vernünftiges Beispiel gesehen. Nur triviale Beispiele.
http://www.hal-pc.org/~johnnie2/winsock.html
Hab mich aber gerade nochmal auf die Suche gemacht.
Dort findet man verschiedene Beispiel. Klick dort mal httpa.c an.
-
ich habe selbst mal das gleiche problem gehabt und es über threads gelöst - funktioniert...