Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Struktur/Aufbau von Chat Client/Server

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.05.2004, 13:43 Uhr
~sackstand
Gast


hi ich hab die aufgabe nen chat zu program. mein Problem ist nun:

ich habe ein server und x Clients. (MFC) nun habe ich ein Problem mit dem abfragen der Sockets und senden/Empfangen der daten. ich benutze select (um nicht alles zu blockieren) mein problem ist das ich mit select gucke wer was tut, oder auch nicht dann empfange wo was ist und zu guter letzt das was zu senden ist an die clients auch sende(damit jeder was von hat :P) tja aber wie bau ich das in eine gute "schleife" oder so??? die tutorials die ich gefunden habe sind alle Dosbox (konsole) und da arbeiten sie mit ner endlosshcleife ... aber das kann ich ja wohl kaum machen dann kill ich ja das Programm :P hat einer ne idee wie ich das angehen kann ??? ist es sinnvoll mit nem Timer zu arbeiten ??? der alle x sekunden die funktion aufruft ?? wenn ja dann aber nur max 1ms oder ?? weil sonst ja die Latenz-Zeit zu hoch wird ?! oder wie geht man das an ???

achso und noch eine frage:

wieso kann ich unter Toolbox->Kompnenten->Timer diesen nciht benutzen (ist ausgegraut) ??

ich benutze C++.Net

greez sacki
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.05.2004, 14:28 Uhr
RHBaum



Also prinzipiell .... sowas wie ne endlosschleife wirst eh brauchen ... betonung liegt auf sowas wie :-)

Als Maximalloesung (also ohne Kompromisse) wurd ich folgendes tun ....
Ich wuerd fuer jede kommunication (1 client <-> Server) nen "eigenen Kanal" bauen ... also sowas wie handshaking .... nen initial Port, wo die clients sich anmelden ... und der server ihnen dann nen anderen port zuweisst ... wo sich sich dann reconnecten und lustig mit den server plaudern koennen. (der server hat fuer jede verbindung dann nen eigenen Thread / prozess)

auf clientseite:
nicht blockierendes lesen wuerde ich ned nutzen, sondern die sockets schon blockieren lassen (das erspart dir das timehandling selbst zu schreiben), dafuer den lesevorgang in nen eigenen Thread auslagern. Der Stellt alle nachrichten in nen Conatainer (Threadsicher) ... und weiterer Thread holt die dinge aus dem container ab und zeigts in deinem Fenster an. Die steuerung wenn der 2.er Thread Daten zu holen hat, wuerd ich ueber events machen, die der lesethread setzt, wenn was neues in deinem container liegt ... in der zwischenzeit tut der Mainthread lustig deine Usereingaben abarbeiten ....

Alternativ geht das auch mit timer... und nicht blockierenden sockets, aber das ist ned so elegeant, und wenn deine Socket haengt, ist dein Programm tot ...

Auf Serverseite aehnlich .... fuer jede verbindung nen eigenen thread ... der nachrichten in conteiner presst und auch nachrichten aus nema anderen container holt ... und verschickt ... und nen verwaltungsthread, der eventgesteurt die Postverteilung und logische abarbeitung sowie das runterfahren organisiert .....

Die Threads laufen prinzipiell alle in schleifen ... dein client mainthread in der nachrichtenschleife ...

Gibt aber viele moeglichkeiten ...

CIao ...

Dieser Post wurde am 12.05.2004 um 14:31 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: