Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di mr.and
    Registrato dal
    Dec 2008
    Messaggi
    51

    applicazione client-server

    Salve ,
    vorrei implementare un'applicazione client-server connessi tramite socket,in cui un server risponde alle varie richieste dei vari client.
    Fino a quando il client è 1 so come gestire la comunicazione anche attraverso l'invio di messaggi,ma quando questi sono n,come faccio inviare un messaggio a 1,2..o anche tutti gli n client?
    Esistono delle classi che agevolano questo lavoro o dovrei implementarmi una classe router?
    Premetto che uso il jdk 1.6.0_07.

    Ps:so che il discorso potrebbe farsi molto vasto,ma ogni dritta è ben'accetta!!

    Ringrazio tutti anticipatamente!

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    Ad esempio ogni volta che il server riceve una connessione da un nuovo client la memorizzi in una struttura dati (e.g. Hashtable) cosi' hai sempre tutte le connessioni a disposizione.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  4. #4
    Utente di HTML.it L'avatar di mr.and
    Registrato dal
    Dec 2008
    Messaggi
    51
    Infatti,avevo immaginato mi servisse qualcosa del genere.Grazie ai consigli di Pastore12 mi sono fatto una buona idea su come far gestire le richieste di più client ad un server(multithreading),e lo ringrazio, ma dei punti mi rimangono ancora oscuri:come faccio per spedire un messaggio a tutti i client?Ad esempio,i client richiedono informazioni sulla risorsa x,condivisa,la quale può essere anche modificata da un client qualsiasi.Ora quando questa viene modificata vorrei che il server avvertisse tutti i client connessi dell'avvenuta modifica.
    Come posso gestire tale opzione del server??

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Dovrai scorrere tutte le connessioni e inviare a ciascuna l'informazione.
    Dipende dalla struttura dati che usi per memorizzare le connessioni.
    Se utilizzi un vettore è semplice: scorri tutto il vettore e effettui l'invio dell'informazione per ciascun elemento del vettore.

    Se utilizzi una Hashtable, come ti è stato suggerito, la cosa è un po' più complessa, perchè devi ottenere l'elenco delle chiavi della Hashtable, quindi iterare su di esse e, per ciascuna, ottenere l'elemento associato e su di esso effettuare l'invio.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Originariamente pubblicato da sun
    The basic flow of logic in such a server is this:

    while (true) {
    accept a connection ;
    create a thread to deal with the client ;
    end while
    A me l'idea di usare una struttura dati per memorizzare le connessioni mi sembra un po' più complicata. Se c'è un'unico thread server, bisogna anche gestire le attese e le richieste contemporanee.. Ma se anche il server è multithreading, meglio, no? Viene tutto in automatico.

    La struttura dati la userei per conservare i thread del server. Quando un thread-client fa una modifica, il thread-server che è connesso scorre la lista e li avvisa della modifica avvenuta.

    Ciao!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Pastore12
    La struttura dati la userei per conservare i thread del server. Quando un thread-client fa una modifica, il thread-server che è connesso scorre la lista e li avvisa della modifica avvenuta.

    Ciao!
    Nessuno metteva in dubbio questo... io ho solo detto come procedere per notificare tutti i client. Trovo più comodo (ma è una mia personale scelta) utilizzare un vettore (o ArrayList) per memorizzare tutti i thread, piuttosto che una Hashmap.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Trovo più comodo utilizzare un vettore (o ArrayList)
    Ok. Niente da ridire. Scusami..
    Il fatto è che sono a corto di sonno... credevo che per connessione si intendesse un Socket e non un Thread. O non tutti e due... basta! Ci dormo sopra Notte!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  9. #9
    Utente di HTML.it L'avatar di mr.and
    Registrato dal
    Dec 2008
    Messaggi
    51
    Allora io alla fine ho fatto così(descrivo un pò il lato server):

    -ho creato una classe ServerPadre,tra i metodi della quale ho inserito il main;
    -il main chiama il costruttore della classe ServerPadre,il quale crea un'istanza di ServerSocket e apre un ciclo while per accettare le connessioni dei vari client;
    -nel ciclo while per ogni client otterrò un socket:questo viene passato al costruttore della classe ServerDedicato(ovvero il server vero e proprio che si occuperà di servire il particolare client)
    -il costruttore di ServerDedicato(classe che implementa Runnable)dopo aver settato le proprie variabili e creato gli stream sul socket passatogli, fa partire un thread separato di ascolto dello stream,invocando un medoto particolare per ogni richiesta del client.

    Ora per poter ottenere la funzionalità di cui parlavo negli altri messaggi(ovvero che,dato che ognuno dei ServerDedicato ha la possibilità di modificare un file X comune a tutti i ServerDedicato,quando ciò avviene ognuno dei client connessi deve ricevere una nuova copia del file X in questione)mi avete suggerito di inserire ognuno dei thread in un Vector.
    Io ho pensato di far gestire tale Vector da metodi del ServerPadre in questo modo:

    -il ServerDedicato che ha effettuato la modifica del file X chiama il metodo notifica del ServerPadre,il quale su ognuno degli elementi del suo Vector(costituiti da oggetti ServerDedicato) chiama il metodo InviaFile(),metodo della classe ServerDedicato ovviamente.Ovviamente l'accesso al socket dovrà essere sincronizzato nei metodi della classe ServerDedicato che ne fanno uso.

    Secondo voi è buona come idea??o c'è qualcosa che non funzionerà a run-time?

    Vi ringrazio per i consigli che mi avete dato e per la pazienza che avete mostrato e che spero continuerete a mostrare verso un povero novizio del linguaggio Java!!

  10. #10
    Utente di HTML.it L'avatar di mr.and
    Registrato dal
    Dec 2008
    Messaggi
    51
    Dimenticavo...un problema comunque mi tormenta ancora(ammesso che non ce ne siano nell'applicazione così come l'ho descritta)..come posso fare per far terminare il tutto? Avevo pensato di far terminare il ServerPadre mettendo un thread in ascolto sulla console,in modo che alla digitazione di un determinato messaggio venisse avviata la procedura di chiusura e terminzaione...ma poi i ServerDedicato?Andrebbero in errore chiamando eventuali metodi del ServerPadre!!

    Come posso Fare??

    Ancora grazie!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.