^  Help Taison

Donazione Libera Paypal


TCPParallelServer.java
TCPParallelServer.java
import java.net.*;
import java.io.*;
import java.util.*;
//Progetto Ingegneria del Software
//Autore: Ignazio Coco
//Matricola: 616/000075
/**
 * Thread per la gestione di una connessione al server dei nomi
 */
class ServerThread extends Thread  {
    /**
     * Riferimento alla Socket gestita dal thread
     */    
    private Socket socket;
    /**
     * riferimento alla lista che mantiene i nomi e gli ip associati degli
     * utenti connessi
     */    
    private LinkedList lista;
    /**
     * Questo parametro permette di impostare il programma in modalità
     * di debug. Ciò comporta la visualizzazione di tutti i messaggi
     * durante la fase di esecuzione
     */    
    public boolean debug=true;
    

    /**
     * Costruttore del thread
     * @param socket Riferimento alla socket da gestire
     * @param lista Riferimento alla lista in cui inserire il nuovo utente
     */    
    public ServerThread (Socket socket, LinkedList lista) {
        this.socket = socket;
        this.lista = lista;
    }
    /**
     * Metodo che gestisce l"esecuzione del thread
     */    
    public void run() {
        try {
            DataInputStream is = new DataInputStream(socket.getInputStream());
            DataOutputStream os = new DataOutputStream(socket.getOutputStream());
            String stringa = is.readLine();
            String tmp[] = stringa.split(":");
            String comando = tmp[0];
            String parametro = tmp[1];
            
            if (comando.equals("retrieveIp")) { 
                if (debug) System.out.println("Richiesta IP");
                retrieveIp(os, parametro);
                if (debug) System.out.println("Dati inviati");
            }
            if (comando.equals("connect")) {
                if (debug) System.out.println("Richiesta connessione");
                connect(socket, os, parametro);
                if (debug) System.out.println("Dati acquisiti");
            }
            if (comando.equals("disconnect")) {
                if (debug) System.out.println("Richiesta disconnessione");
                disconnect(parametro);
                if (debug) System.out.println("Scollegato");
            }
            if (comando.equals("retrieveName")) {
                if (debug) System.out.println("Richiesta Nome");
                retrieveName(os, parametro);
                if (debug) System.out.println("Dati inviati");
            }
            os.close();
            is.close();
            socket.close();
            if (debug) System.out.println("Socket Chiuso");
         }
         catch (IOException e) {
             System.out.println("IOException: " + e);
             if (debug) System.out.println("Errore su metodo run classe serverthread");
         }
    }
    /**
     * Metodo che connette l"utente alla chat. Si occupa di registrare l"
     * utente usando il suo nickname ed associandolo al suo indirizzo Ip
     * @param os Lo stream su cui scrivere la risposta (l"esito della
     * connessione)
     * @param sk Riferimento alla socket dell"utente
     * @param nome Il nome dell"utente che sta cercando di collegarsi
     * @return Un intero che indica l"esito dell"operazione
     */    
    public int connect(Socket sk, DataOutputStream os, String nome) {
        InetAddress address = sk.getInetAddress();
        String indIp = address.getHostAddress();
        int porta = 7777;
        String mess=nome+":"+indIp+":"+porta;
        if (debug) System.out.println("Connesso:" + mess);
        String stringa="", tmp[]=null, nomeS="";
        for (int i=0;i<lista.size();i++) {
            stringa=(String)lista.get(i);
            tmp = stringa.split(":");
            nomeS=tmp[0];
            if (nomeS.equals(nome)) {
                if (debug) System.out.println("Nome già registrato");
                try {
                    os.writeBytes("###Nome già registrato"+"\n");
                }
                catch (IOException e) {
                    if (debug) System.out.println("Errore risposta server nomi");
                    if (debug) System.out.println(e);
                    return -1;
                }
                return -1;
            }
        }
        lista.add(mess);
        try {
            os.writeBytes("OK"+"\n");
        }
        catch (IOException e) {
            if (debug) System.out.println("Errore risposta server nomi");
            if (debug) System.out.println(e);
            return -1;
        }
        if (debug) System.out.println("Dimensione lista: "+lista.size());
        return 0;
    }
    /**
     * Metodo che ritorna l"Ip a partire dal nome dell"utente
     * @param os Lo stream di output su cui scrivere l"indirizzo
     * Ip richiesto
     * @param utente Il nome dell"utente di cui si vuole conoscere l"Ip
     * @return Un intero che indica l"esito dell"operazione
     */    
    public int retrieveIp (DataOutputStream os, String utente) {
        String stringa="";
        if (debug) System.out.println("Dimensione lista:" + lista.size());
        for (int i=0;i<lista.size();i++) {
             stringa=(String) lista.get(i);
             System.out.println(i+" "+stringa);
             String tmp[] = stringa.split(":");
             String nome=tmp[0];
             if (nome.equals(utente)) {
                 try {
                    os.writeBytes(stringa);
                 }
                 catch (IOException e) { }
                 if (debug) System.out.println("TROVATO: " + stringa + " DA:" + utente);
                 return 0;
             }
         }
         if (debug) System.out.println("NON trovato:" + utente);
         try {
            os.writeBytes("### Utente " + utente + " offline");
         }
         catch (IOException e) { }
         return -1;
     }
    /**
     * Metodo che restituisce il nome di un utente a partire dall"indirizzo
     * Ip
     * @param os Lo stream di output su cui scrivere l"indirizzo
     * Ip richiesto
     * @param ip L"ip dell"utente di cui si vuole conoscere il nome
     * @return Un intero che indica l"esito dell"operazione
     */    
    public int retrieveName (DataOutputStream os, String ip) {
        String stringa="";
        if (debug) System.out.println("Dimensione lista:" + lista.size());
        for (int i=0;i<lista.size();i++) {
             stringa=(String) lista.get(i);
             System.out.println(i+" "+stringa);
             String tmp[] = stringa.split(":");
             String ipS=tmp[1];
             if (ip.equals(ipS)) {
                 try {
                    os.writeBytes(stringa);
                 }
                 catch (IOException e) { }
                 if (debug) System.out.println("TROVATO: " + stringa + " DA:" + ip);
                 return 0;
             }
         }
         if (debug) System.out.println("NON trovato:" + ip);
         try {
            os.writeBytes("###<no-name>");
         }
         catch (IOException e) { }
         return -1;
     }
    /**
     * Metodo che disconnette l"utente dal server
     * @param nome Il nome dell"utente da disconnettere
     */    
    public void disconnect(String nome) {
        String stringa=""; 
        for (int i=0;i<lista.size();i++) {
            stringa=(String) lista.get(i);
            System.out.println(i+" "+stringa);
            String tmp[] = stringa.split(":");
            String nomeS=tmp[0];
            if (nome.equals(nomeS)) {
                lista.remove(i);
                if (debug) System.out.println("TROVATO: " + stringa + " DA:" + nome);
                break;
            }
        }
    }
}
/**
 * Classe che implementa il server dei nomi. Si occupa di ricevere le
 * richieste in ingresso e di avviare i thread per la loro gestione
 */
public class TCPParallelServer {
    /**
     * Metodo per l"avvio del server
     */    
   public void start() {
       ServerSocket serverSocket=null;
       Socket socket=null;
       try {
           serverSocket = new ServerSocket(5555);
       }
       catch(IOException e) {
           System.out.println("Impossibile avviare la socket - server nomi");
       }
         System.out.println(serverSocket.getInetAddress().getHostAddress());
         System.out.println(serverSocket.getInetAddress().getHostName());
         System.out.println(serverSocket);
         LinkedList lista=new LinkedList();
         //Ciclo infinito di ascolto dei Client
         while(true) {
             System.out.println("In attesa di chiamate dai Client... ");
             try {
                 socket = serverSocket.accept();
             }
             catch (IOException e) {
                 
             }
             System.out.println("Ho ricevuto una chiamata di apertura da:\n" + socket);
             ServerThread serverThread = new ServerThread(socket, lista);
             serverThread.start();
           }
     }
   /**
    * Metodo principale
    * @param args nessun argomento da passare
    * @throws Exception Eccezione non gestita per l"output
    */   
   public static void main (String[] args)  throws Exception {
         TCPParallelServer tcpServer = new TCPParallelServer();
         tcpServer.start();
     }
}

print

Follow cesareino on Twitter
 
^  Twitter
 
^  Login





Lingua del sito:
deutsch english español français italiano português
 
^  Ads
Freely inspired to Mollio and DKBlog template