chat-tool: empfangen und tippen parallel in der console
-
hallo!
ich hab n chat-tool gebastelt mit serverpart und client im consolenbereich...
ich habs jetz soweit hinbekommen, dass ich ich mit dem client zum server connecten kann und auch texte per eingabe zum server senden kann...
nun hab ich aber ein prob!ich hab das ganze verfahren mit ner do while schleife gelöst...
hier der ausschnitt:do { colcout.setcolor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY ); command.getmessage(c); cout<<endl; cout<<">"; cin>>insert; if (strcmp(insert,"\n")==0) { strcpy(insert,"empty"); } else if (strcmp(insert,"/exit")==0) { command.exit(insert); } else if (strcmp(insert,"/help")==0) { command.help(); strcpy(insert,"empty"); } else { command.sendmessage(insert, c); strcpy(insert,"empty"); } } while (strcmp(insert,"empty")==0); closesocket(s); return (0); };
d.h. solange ich nix bestimmtes eingib, sendet er "insert" zum anderen...
mit "empty" fängt die schleife wieder von vorne an, nämlich bei getmessage()---> nur ich will ja , dass ich sowohl was eintippen kann, als auch daten
empfangen kann! aber in dem fall kann er entweder das eine, oder das andere...!
d.h. cin>>insert blockiert alles, da er erst dann weiter macht, wenn ich was eingib...nur mir fällt keine lösung ein...
ich hab mal an interrupts gedacht, aber da hab ich kein plan naja, vielleicht gehts ja auch ohne ...mfg
haMMerEdit: Code-Tags benützen!
[ Dieser Beitrag wurde am 20.01.2003 um 17:52 Uhr von SideWinder editiert. ]
-
guck doch immer nach ob eine taste gedrückt wurde ( kbhit() ), wenn ja lies das zeichen ein und häng es hinten an die nachricht dran.das machst du solange bis enter gedrückt wird,dann hängst du ein '\0' an und verschickt es..
zwischendurch kannst du immer prüfen ob neue daten ankommen.
hoffe das hilft
-
Stichwort select()(klappt unter linux und windows) einfach mal googlen oder unter Windows die funktion WSAAsyncSelect().
die Funktionen überwachen die Eingabe über die Tastatur und den Empfang über deinen Port praktisch "gleichzeitig". schöne sachen, nur ein bisschen schwer
-
wie is kbhit() deklariert... und welchen rückgabewert hat es ?
brauch ich da ne extra header-file als include ?
bei mir kommt nämlich undeclared identifier...wenn das so ist mit kbhit() , wie erkennt er dann ob ne taste gedrückt wurde?
kann ich sagen kbhit() == true ? oder welchen rückgabewert hat es ?
-
kbhit() is glaub ich leider kein standard..
in der faq steht was dazu ("getch(), cin und kbhit()" oder so als titel)
man kann ja auch irgenwas anderes nehmen
-
kbhit() ist kein Standard, da hast du recht. Allerdings gibt es dafür keinen Standard-Ersatz.
Informationen zu kbhit() finden sich in der FAQ unter "getch(), getche(), kbhit(), getchar()".
MfG SideWinder