Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  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
    eh... Vorrei sia accessibile da internet...

    Quindi:
    - devo configurare/aprire la porta relativa al servizio che offro e controllare che non sia filtrata...
    - dato che ho un IP dinamico devo utilizzare i servizi di DDNS, Dynamic DNS (che non so proprio come configurarli )

    Ma alla fìne di tutto ciò dove lo vado a prendere l'ip da settare nel client? Immagino a seguito delle suddette configurazioni di DDNS e Dynamic DNS??

    Ci sono guide/tutorial per far tutto ciò?

  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
    - dato che ho un IP dinamico devo utilizzare i servizi di DDNS, Dynamic DNS (che non so proprio come configurarli )
    Molti router ADSL "moderni" supportano già uno o più servizi "noti" di DDNS. Quindi verifica il pannello di controllo del tuo router.

    Quote Originariamente inviata da tuturo Visualizza il messaggio
    Ma alla fìne di tutto ciò dove lo vado a prendere l'ip da settare nel client? Immagino a seguito delle suddette configurazioni di DDNS e Dynamic DNS??
    Avrai poi un "hostname" .... è quello l'obiettivo dei servizi DDNS, ovvero fornire un hostname "stabile" a fronte di un IP che cambia anche di giorno in giorno.

    Quote Originariamente inviata da tuturo Visualizza il messaggio
    Ci sono guide/tutorial per far tutto ciò?
    Quasi certamente, ma non ho link al momento.
    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
    Ultima domanda per il momento, poi magari mi rifarò vivo

    Mettiamo che ho risolto tutti questi punti in sospeso...

    Quando un client (ad esempio tu) fa una richiesta al mio server conoscendo l'hostname, posso io stampare nel server l'indirizzo ip publblico del client che si è connesso?

  10. #10
    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
    Quando un client (ad esempio tu) fa una richiesta al mio server conoscendo l'hostname, posso io stampare nel server l'indirizzo ip publblico del client che si è connesso?
    Sì, il server lo "sa" l'indirizzo IP (quello visibile al server, ovvio) di chi ha fatto la connessione (su un java.net.Socket fornito da ServerSocket con getInetAddress() ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.