Ciao a tutti, non so come creare un server che gestisce più client, vorrei informazioni sulla gestione dei thread in java. Grazie a tutti!![]()
Ciao a tutti, non so come creare un server che gestisce più client, vorrei informazioni sulla gestione dei thread in java. Grazie a tutti!![]()
detto a livello ridicolo
crei un ServerSocket in ascolto su una porta
un client si connette, il server gli dice una porta per collegarsi
il client chiude la prima connessione e ne apre una nuova
sulla porta che gli arriva dal server
crei un altro ServerSocket sulla porta scelta e parli col client
mentre il server principale sta in ascolto di un altro client
ma ci sono altri modi, se vuoi fare connessioni veloci forse non devi usare altre porte strane
Non mi è proprio chiaro, non sapresti dirmi dove posso trovare informazioni es. titoli di libri etc...
Grazie comunque della risposta!
con una ServerSocket ascoli la porta che ti interessa, quando avviene una connesione ti viene ritornato un oggetto Socket che puoi passare ad una classe che gestisce i client, per evitare che nel momento in cui la classe a cui hai passato il client blocchi il processo di listening della porta fai appunto un thread, quindi ecco una sintesi:
questa è l'ossatura generale che potresti usare, per altre info sul multithreading ti vonviene scaricarti, tramite registrazione free, il libro della www.mokabyte.itcodice:... ServerSocket s = new ServerSocket(100); Socket ss = null;; while(true) { ss = s.accept(); new Client(ss); } ... ... class Client extends Thread { protected Socket ss = null; protected DataOutputStream os = null; Client(Socket ss) { this.ss = ss; this.start(); } void run() { os = new DataOutputStream(ss.getOutputStream()); os.writeBytes("Benvenuto sul server\n".getBytes()); os.close(); } } ...
![]()
Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)
qui sennò hai un esempio più completo che usa il protocollo TCP/IP e UDP: http://www.latoserver.it/java/socket_tcp/
![]()
Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)
Si grazie, ho già visitato www.latoserver.it , ma c'è l'esempio di un server non multithread.
cosa?Originariamente inviato da ab83
Si grazie, ho già visitato www.latoserver.it , ma c'è l'esempio di un server non multithread.![]()
Dal link:
Nell’esempio seguente viene proposto un Server in multithreading.
codice://Importo i package import java.net.*; import java.io.*; //Creazione di una classe per il Multrithreading class ServerThread extends Thread { private Socket socket; public ServerThread (Socket socket) { this.socket = socket; } //esecuzione del Thread sul Socket public void run() { try { DataInputStream is = new DataInputStream(socket.getInputStream()); DataOutputStream os = new DataOutputStream(socket.getOutputStream()); while(true) { String userInput = is.readLine(); if (userInput == null || userInput.equals("QUIT")) break; os.writeBytes(userInput + '\n'); System.out.println("Il Client ha scritto: " + userInput); } os.close(); is.close(); System.out.println("Ho ricevuto una chiamata di chiusura da:\n" + socket + "\n"); socket.close(); } catch (IOException e) { System.out.println("IOException: " + e); } } } //Classe Server per attivare la Socket public class TCPParallelServer { public void start() throws Exception { ServerSocket serverSocket = new ServerSocket(7777); //Ciclo infinito di ascolto dei Client while(true) { System.out.println("In attesa di chiamate dai Client... "); Socket socket = serverSocket.accept(); System.out.println("Ho ricevuto una chiamata di apertura da:\n" + socket); ServerThread serverThread = new ServerThread(socket); serverThread.start(); } } public static void main (String[] args) throws Exception { TCPParallelServer tcpServer = new TCPParallelServer(); tcpServer.start(); } }![]()
Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)