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

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34

    [JAVA] client e server (macchine e rete diversi)

    Salve a tutti. Vi espongo il mio problema:

    Vorrei realizzare un client e un server che siano installati su macchine diverse.
    Quando dico macchine diverse intendo che io ho il server e qualcuno di voi ha il client.

    Le classi base che ho implementato sono le seguenti:

    - SERVER
    codice:
    public class Server {    
        public static void main(String[] args)
        {
            try
            {
                // apertura del socket server
                ServerSocket server = new ServerSocket(12345);
                // dichiarazione del socket client e del buffer di ingresso
                Socket client;
                BufferedReader in;
                System.out.println("Server ready (CTRL-C quits)\n");
                // ciclo infinito
                while(true)
                {
                    // chiamata bloccante, in attesa di connessione da parte di un client
                    client = server.accept();
                    System.out.println("Client connected: "+client);
                    // lettura e stampa del messaggio in ingresso
                    in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    System.out.println(">> "+client.getInetAddress()+": "+in.readLine()+"\n");
                    // chiusura del client socket
                    client.close();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }


    - CLIENT
    codice:
    public class Client {    
        public static void main(String[] args)
        {
            // verifica correttezza dei parametri
            String messaggio = "Ciao mondo";
            try
            {
                // preparazione dell'indirizzo del server
                InetAddress address = InetAddress.getByName("localhost");
                // creazione socket
                Socket client = new Socket(address, 12345);
                System.out.println("Client ready.\n");
                // creazione buffer di scrittura
                PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
                System.out.println("Buffer ready, sending message \""+messaggio+"\"...\n");
                // scrittura del messaggio (passato come parametro) nel buffer in uscita
                out.println(messaggio);
                System.out.println("Message sent.\n");
    
    
                // chiusura socket
                client.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }


    Allora in locale il tutto funziona. Ora per fare il passo avanti ovvero fare un programma distribuito, ovviamente il client deve conoscere a priori l'indirizzo ip del server.
    Quindi basta modificare nel Client le seguenti righe?

    codice:
     
    InetAddress address = InetAddress.getByName("localhost");
    Socket client = new Socket(address, 12345);



    Eliminando la prima riga e scrivendo manualmente ad esempio :
    codice:
    Socket client = new Socket("111.22.3.4", 12345);

    Illuminatemi su questo perchè avrei altre domande forse più interessanti
    e grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tuturo Visualizza il messaggio
    ovviamente il client deve conoscere a priori l'indirizzo ip del server.
    Sì, ovviamente.

    Quote Originariamente inviata da tuturo Visualizza il messaggio
    Quindi basta modificare nel Client le seguenti righe?

    Eliminando la prima riga e scrivendo manualmente ad esempio :
    codice:
    Socket client = new Socket("111.22.3.4", 12345);
    Sì. In generale l'host può essere specificato anche come hostname (che deve essere risolto da un DNS), oltre che come indirizzo ip numerico nella forma "dotted" (nnn.mmm.......).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    ma la macchina su cui risiede il server deve avere necessariamente ind ip statico? se si come lo si rende tale?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tuturo Visualizza il messaggio
    ma la macchina su cui risiede il server deve avere necessariamente ind ip statico? se si come lo si rende tale?
    In generale, l'indirizzo IP di una interfaccia di rete lo puoi configurare come "statico" o "dinamico". Se dinamico, sulla rete locale ci deve essere chiaramente un server DHCP che fornisce gli indirizzi.

    Se si parla dell'indirizzo IP "pubblico" su internet, se è statico o dinamico dipende dal contratto con l'operatore della connessione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    chiarissimo come sempre
    ma quali tra i due è adatto allo scopo/scenario descritto prima? il pubblico?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tuturo Visualizza il messaggio
    chiarissimo come sempre
    ma quali tra i due è adatto allo scopo/scenario descritto prima? il pubblico?
    Dipende se il server vuoi che sia accessibile solo sulla rete locale oppure "da internet". In quest'ultimo caso ci sono altre considerazioni: http://forum.html.it/forum/showthrea...1#post25163307
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    Possono essere problemi di firewall o porte?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tuturo Visualizza il messaggio
    java.net.ConnectException: Connection refused: connect
    Quote Originariamente inviata da tuturo Visualizza il messaggio
    Possono essere problemi di firewall o porte?
    Hai configurato il NAT (Network Address Translation) sul router? Ci deve essere una regola che dice: "tutto quello che arriva sulla porta X dall'esterno, "giralo" sulla rete locale all'indirizzo es. 192.168.xx.yy porta X".

    Hai verificato se sul S.O. della macchina server c'è un firewall sw? E se sì, configurato per aprire anche qui la porta?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Hai configurato il NAT (Network Address Translation) sul router? Ci deve essere una regola che dice: "tutto quello che arriva sulla porta X dall'esterno, "giralo" sulla rete locale all'indirizzo es. 192.168.xx.yy porta X".
    Stavo provando a configurare qualcosa del genere ma non ci sono riuscito...
    se guardi l'allegato, dlink mi chiede una serie di parametri che ho cosi settato come vedi...

    Le due porte esterne sono quelle dove viene offerto il servizio PORT:12345;
    Il protocollo è TCP;
    Ma ho i dubbi su:

    -indirizzo ip server : devo metterci la traduzione dell'hostname? o cosa?

    -porte interne : sono le stesse rispetto alle porte esterne?

    -ip remoto : qui invece sono davvero confuso
    Immagini allegate Immagini allegate

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    ho risolto facendo questi passaggi:

    definito un ip statico 192.168.1.100

    e nella configurazione ho cosi compilato:
    le porte : 12345
    protocollo : TCP
    indirizzo ip server : 192.168.1.100
    ip remoto : "vuoto"

    La cosa curiosa e che non mi so spiegare è che la comunicazione funge se le due macchine sono su rete diversa.
    Se sono sotto la stessa wifi non funge poichè nel client avviene un timed out connection...

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.