Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Apr 2005
    Messaggi
    9

    [JAVA]Creare un server multithread

    Ciao a tutti, non so come creare un server che gestisce più client, vorrei informazioni sulla gestione dei thread in java. Grazie a tutti!

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    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

  3. #3
    Utente bannato
    Registrato dal
    Apr 2005
    Messaggi
    9

    non molto chiaro

    Non mi è proprio chiaro, non sapresti dirmi dove posso trovare informazioni es. titoli di libri etc...
    Grazie comunque della risposta!

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    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:

    codice:
    ...
    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();
    }
    
    }
    ...
    questa è l'ossatura generale che potresti usare, per altre info sul multithreading ti vonviene scaricarti, tramite registrazione free, il libro della www.mokabyte.it

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    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)

  6. #6
    Utente bannato
    Registrato dal
    Apr 2005
    Messaggi
    9

    già visitato

    Si grazie, ho già visitato www.latoserver.it , ma c'è l'esempio di un server non multithread.

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425

    Re: già visitato

    Originariamente inviato da ab83
    Si grazie, ho già visitato www.latoserver.it , ma c'è l'esempio di un server non multithread.
    cosa?

    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)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.