PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Server: Anregungen



jonasge
19-07-2005, 14:01
Hallo,
ich versuche mich gerade folgendes Programm zu schreiben:
Das programm soll auf einem TCP/IP Port laufen, und es sollen sich client zu dem Programm verbinden, ein anderer Teil von einem Programm ueberwach ein Device, wenn dort ein spezielles Event Auftritt, soll eine Nachricht mit werten die von dem Device kommen an alle verbundenen Client verschickt werden.
Was ich bereits habe, ist das Device, das events ausgibt auf der konsole mittels printf() Ich habe auch schon ein keinen testserver geschrieben, der mehrere Clients verbinden laesst und sich per fork() verdoppelt.

Nun ist meine frage, wie muss ich das anstellen, das ich per fork mehrere client verbunden habe, und dann wenn ein event auftritt das per write auf die sockets schreibe?


Gruß
Jonas

[0x[90]|
20-07-2005, 21:46
Eh, wenn du das ganze forkst, erstellst du einen neuen Prozess, mit dem du auf deine Device-Funktionen auch zugreifen kannst. Sprich: Du liest im Fork einfach dein Device aus.

TGT
21-07-2005, 06:53
...oder du verwendest select

Mattburger
21-07-2005, 07:41
Hi Jonas,

Lösung A: Kein Fork, du sammelst die Sockets und bearbeitest die Clients sequentiell. Oder mit fork, dann jedoch brauchts du wahrscheinlich Pipes für die Interprozesskommunikation, da du nicht auf den gliechen Datenbereich zugreifen kannst.

Lösung B: Du verwendest Threads und kannst damit auf den gleichen Datenbereich zugreifen. Das Device schreibt die Daten in den Programm-globalen Datenbereich und verständigt die Threads diese Daten an die Clients zu schreiben. Das würde ich machen.

Grüße
Mike

[0x[90]|
21-07-2005, 12:50
Och, nicht noch so n Threader. Unter Linux sind Threads besch...eiden implementiert, also hoert bitte auf den Leuten vorzuschlagen, Threads zu verwenden. Wenn ich mir Vorstelle dass zukuenftig alle meine Applikationen pthreads verwenden wird mir schlecht. Ich habe selber eigentlich nur schlechte Erfahrungen mit pthreads gemacht. Man sollte Threads wirklich nur in Programmen verwenden, wo es definitiv nicht anders geht! (Wine als Beispiel)

Bye

jonasge
24-07-2005, 19:25
mattbuger, an threads dachte ich auch schon, jeder thread gibt ja eine thread ID zurueck, diese wuerde ich dann sammeln, und wenn eine event auftritt, muesste man irgendwie sagen unterbreche die while read auf dem socket und mache ein write mit den daten die ich vom device bekomme auf diesen socket.
So ala notify_all in java

Geht das mit threads?


Gruß
Jonas