Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [Java] RMI esecuzione

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    44

    [Java] RMI esecuzione

    Ciao a tutti!! Ho un problema con RMI, ho realizzato un server che offre l'invocazione remota di due metodi tramite questa intefaccia e la sua implementazione:

    codice:
    import java.net.InetAddress;
    import java.rmi.*;
    import java.util.Vector;
    
    public interface ServiziBoot extends Remote {
        
        public Vector<InetAddress> richiediLista();
        
        public void segnalaAffidabile(InetAddress ipAff);
        
    }
    codice:
    import java.net.InetAddress;
    import java.rmi.*;
    import java.rmi.server.UnicastRemoteObject;
    import java.util.Vector;
    
    public class RMIServiziBoot extends UnicastRemoteObject implements ServiziBoot {
    
        public RMIServiziBoot() throws RemoteException {}
        
        public Vector<InetAddress> richiediLista() {
            return BootstrapServer.getLista();
        }
    
        public void segnalaAffidabile(InetAddress ipAff) {
            BootstrapServer.addInd(ipAff);
        }
    
    }
    main server:

    codice:
    ....
    
    public static void main(String[] args) {
            lista = new Vector<InetAddress>();
            try {
                
                addInd(InetAddress.getByName("144.166.1.1"));
                addInd(InetAddress.getByName("144.166.2.44"));
            } 
            catch (UnknownHostException ex) {}
            
            ObjectInputStream is = null;
            lista = new Vector<InetAddress>();
            
            try {
                is = new ObjectInputStream(new FileInputStream("lista.txt"));
                lista = (Vector<InetAddress>) is.readObject();
                is.close();
            } 
            catch (IOException ex) {} 
            catch (ClassNotFoundException ex) {}
            
            try {
                ServiziBoot server = new RMIServiziBoot();
                Naming.rebind("//localhost/RMIServiziBoot",server);
            } catch(RemoteException ex) {
                
            } catch(MalformedURLException e) {
                
            }
    
    ....
    e un client per testarlo con il seguente codice:

    codice:
    import java.net.InetAddress;
    import java.net.MalformedURLException;
    import java.rmi.Naming;
    import java.rmi.NotBoundException;
    import java.rmi.RemoteException;
    import java.util.Vector;
    
    /**
     *
     * @author FedericaB
     */
    public class Main {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            Vector<InetAddress> lista = null;
            try {
                ServiziBoot listaServer = (ServiziBoot) Naming.lookup ("rmi://localhost/RMIServiziBoot");
                lista = listaServer.richiediLista(); 
            }
            catch(NotBoundException e) {
                e.printStackTrace( );
            }
            catch(RemoteException e) {
                e.printStackTrace( );
            }
            catch(MalformedURLException e) {
                e.printStackTrace( );
            }
    
            System.out.println("Lista " + lista.get(0).getHostAddress());
    
        }
    
    }
    Il server viene eseguito e termina, mentre il client genera i seguenti errori:


    codice:
    java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
            java.net.ConnectException: Connection refused: connect
            at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
            at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
            at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
            at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
            at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
            at java.rmi.Naming.lookup(Naming.java:84)
            at testrmiboot.Main.main(Main.java:27)
    Caused by: java.net.ConnectException: Connection refused: connect
            at java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
            at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
            at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
            at java.net.Socket.connect(Socket.java:519)
            at java.net.Socket.connect(Socket.java:469)
            at java.net.Socket.<init>(Socket.java:366)
            at java.net.Socket.<init>(Socket.java:180)
            at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
            at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
            at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
            ... 6 more
    Exception in thread "main" java.lang.NullPointerException
            at testrmiboot.Main.main(Main.java:40)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 3 seconds)
    Sapreste dirmi dov'è il problema?

    Grazie

  2. #2
    Ciao,

    la terminazione del server non è normale...il server deve rimanere in attesa delle richieste dei client. Il problema molto probabilmente è in:

    ServiziBoot server = new RMIServiziBoot();
    Magari è proprio l'avvio dell'RMI registry che non va a buon fine! posta il codice anche di quella parte!

    Cmq la parola "BootstrapServer" mi fa venire in mente l'esame di LPR dell'UNI di Pisa che sto affrontando anche io (oramai sono quasi alla fine), Saluti

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.