Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Socket client-server

  1. #1

    Socket client-server

    Ciao a tutti. Sto iniziando a programmare sistemi distribuiti in java. Avrei bisogno di creare un collegamento socket tra diversi nodi del sistema distribuito. Ho pensato di creare per ogni nodo una parte server in modo tale ke ogni nodo comunichi via socket con le parti server degli altri. E' possibile fare una cosa del genere?

  2. #2
    Cioè in poche parole vorrei creare un sistema peertopeer ma non so come far si che un nodo possa implementare sia la parte server che la parte client. Sapreste indirizzarmi in qualche modo?
    Grazie

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da samirol
    ma non so come far si che un nodo possa implementare sia la parte server che la parte client.
    Se parliamo di socket TCP (non "datagram", insomma), allora la tua applicazione deve poter gestire un ServerSocket (sta in ascolto su una certa porta e ad ogni accept() ritorna fornendo un Socket per poter comunicare con il client) e un Socket per connettersi ad un altro server.

    I socket sono spiegati sul tutorial Sun: All About Sockets
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Questo si. Ma Se io avessi due nodi A e B che comunicano tra di loro ho bisogno che sia il nodo A sia il nodo B implementino una parte server e una client. E' qui che mi blocco!
    E' possibile con un solo main far partire sia la parte server che la parte client?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da samirol
    Questo si. Ma Se io avessi due nodi A e B che comunicano tra di loro ho bisogno che sia il nodo A sia il nodo B implementino una parte server e una client. E' qui che mi blocco!
    E' possibile con un solo main far partire sia la parte server che la parte client?
    Innanzitutto un nodo deve poter "servire" solo 1 client per volta o più client contemporaneamente?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    un nodo deve poter gestire più richieste contemporaneamente quindi la parte server deve estendere la classe Thread.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da samirol
    un nodo deve poter gestire più richieste contemporaneamente quindi la parte server deve estendere la classe Thread.
    Non esattamente, vediamo la cosa in generale. Innanzitutto in questi casi si dice che il server è "concorrente". Ci deve essere un thread dedicato solo alla gestione del ServerSocket eseguendo in ciclo la accept(). Ogni volta che la accept ritorna fornisce un Socket per poter "parlare" con il client. Quindi per gestire ogni connessione in modo "concorrente" si deve creare un altro nuovo thread nel cui contesto verrà usato il Socket fornito e i suoi stream.

    Per la parte "client", non so se la tua applicazione fa uso di una interfaccia grafica es. AWT/Swing. Se sì, allora devi tenere in considerazione gli aspetti del threading nelle interfacce grafiche, sapere cosa è il EDT (event dispatch thread) e come si usa.
    Ed eseguire qualunque I/O, anche sui socket, nel contesto del EDT non va bene, perché tenendo tu impegnato il EDT la tua interfaccia è "congelata" in quel frangente.
    Quindi anche qui ci vorrebbe un altro thread ancora per gestire la comunicazione verso il server.

    Mi pare scontato dire che per fare cose a questo livello bisogna essere abbastanza "ferrati" sulla programmazione "concorrente" in Java (thread, sincronizzazione, ecc...).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Originariamente inviato da andbin
    Ci deve essere un thread dedicato solo alla gestione del ServerSocket eseguendo in ciclo la accept(). Ogni volta che la accept ritorna fornisce un Socket per poter "parlare" con il client. Quindi per gestire ogni connessione in modo "concorrente" si deve creare un altro nuovo thread nel cui contesto verrà usato il Socket fornito e i suoi stream.
    Ma per ogni nodo devo creare una ServerSocket ed è qui il mio problema...
    Comunque per il client non devo implementare l'interfaccia grafica!

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da samirol
    Ma per ogni nodo devo creare una ServerSocket ed è qui il mio problema...
    E quale sarebbe di preciso?

    Originariamente inviato da samirol
    Comunque per il client non devo implementare l'interfaccia grafica!
    Bene, meglio ancora. il lato client potresti gestirlo nel "main" thread (che è quello usato per eseguire il ben noto entry-point main(), per intenderci).
    La gestione del ServerSocket devi comunque farla in un altro thread separato, quindi dal "main" thread, prima di partire con la gestione del client, fai partire questo thread separato.

    E ricorda, ma quasi sicuramente già lo sai, che per definire il "lavoro" di un thread le opzioni sono due: estendere Thread oppure implementare Runnable. Generalmente è preferibile la seconda, anche dal punto di vista concettuale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Originariamente inviato da andbin

    La gestione del ServerSocket devi comunque farla in un altro thread separato, quindi dal "main" thread, prima di partire con la gestione del client, fai partire questo thread separato.
    Ecco hai centrato perfettamente il problema!! Non so come devo fare per far partire dal main thread la gestione del Server. E' solo questo il punto critico. Perchè io ho già scritto il "main lato client" e il dispatcher lato server ma non so come far partire il secondo dal primo!

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.