Newsgroup: it.comp.os.linux.development
Titolo: client - server!!!

per la gestione di un server remoto
ho realizzato un applicativo server in C
funzionanteda console.
a suo tempo avevo creato i client in VB per windows.
ora avrei la necessità di creare una ver. del
client per linux.
ho incominciato con kdevelop e dopo aver creato
la GUI, aver gestito la pressione dei pulsanti
(che inviano i coamndi al server),
mi trovo impossibilitato nella gestione della
ricezione da parte del client delle comunciazioni
dal server.
1) creai un socket che rimaneva in ascolto
su una porta (eseguito parallelamente al
programma principale (la GUI) con un fork),
ma quando il socket riceveva i dati e tentava 
di modificare la GUI, il programma si
piantava... perchè?
2) pensavo di creare due applciativi differenti
(gui e socket server), che comunicassero tramite
stdin e stdout, ma alla fine sarei al punto
di partenza.
ora vi chiedo:
come posso fare a modificare la gui a run-time
in base ad un evento esterno (in particolare
la ricezione di un dato sun un socket) e non
in base ad un evento generato da un utente?
Grazie a tutti!!!
-- 
Denis
WebMaster di 
www.casafiorita.it

 in base ad un evento generato da un utente?
Il tuo problema credo sia fondamentalmente di progettazione. 
In questo tipo di applicazioni conviene adoperare una logica in cui
la parte grafica e disaccoppiata da quella di gestione dell'applicativo.
In sostanza, devi ricorrere ad un modello di progettazione basato sul 
pattern observer, e se stai usando il C++ questa è la soluzione migliore.
Quello che ti conviene fare è separare l'applicativo logicamente in due
parti: il nucleo che gestisce la ricezione dei dati dal server che gira in
un proprio thread e comunica alla GUI le informazioni, a sua volta in
esecuzione in un proprio thread. 
Saluti

 esecuzione in un proprio thread.
ed è esattamente ciò che ho fatto....
ho creato i due thread distinti,
uno per la gui e l'altro per il socket
usando un fork...
ora, come comunico i ddati fra i due?!
e soprattutto, come modifico la gui
dal thread socket?
grazie


 
No, qua non ci siamo. Con la fork() tu crei un nuovo processo
e non un nuovo thread, che nel caso di linux non condivide lo stesso 
spazio di indirizzamento (dovresti adoperare la clone()).
Devi, invece, fare uso della libreria pthread. Per quanto riguarda
la gestione del threading, ti dico su due piedi che non è una cosa
facile, soprtattutto per quanto riguarda il name mangling del C++. A questo
punto, visto che stai usando la KDE, pui fare uso del wrapper per la
libreria pthread fornito dalle QT con la classe CThread, o qualcosa di
simile perchè ora non mi ricordo, e gestirti gli accessi concorrenti, ecc,
ecc, ecc. Comunque, se è la prima volta, ti preannuncio che non è cosa
facile, e ti conviene studiare prima qualche libro e poi metterti
all'opera: le race condition in queste situazioni sono dietro l'angolo.
Ciao

 all'opera: le race condition in queste situazioni sono dietro l'angolo.
cosa potrei leggere?
hai qlc indirizzo dove trovare un po'
di documentazione?
grazie...
oppure non hai un semplice esempio
per farmi modificare il testo di una
label fuori dagli eventi della GUI?
grazie di tutto...
