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. |