Создайте объект на стороне клиента, добавьте его на сервер и вызовите эти методы - PullRequest
0 голосов
/ 04 ноября 2018

Я сейчас работаю над rmi, но у меня возникла проблема, как только я вызываю метод моего удаленного объекта. На самом деле у меня есть метод, который позволяет мне восстановить список заметок об автомобиле, а заметка состоит из заметки и комментария. вот мой класс и интерфейс:

Примечание интерфейс:

public interface Vehicle extends Remote {
    public String getComment() throws RemoteException;
    public int getNote() throws RemoteException;
}

Класс примечания:

public class Note extends UnicastRemoteObject implements NoteInterface, Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private final String comment;
    private final int note;

    public Note(String comment, int note) throws RemoteException {
        super();
        if (note < -1) {
            throw new IllegalArgumentException("Invalid input");
        }

        this.comment = comment;
        this.note = note;
    }

    @Override
    public final String getComment() throws RemoteException{
        return comment;
    }

    @Override
    public final int getNote() throws RemoteException {
        return note;
    }
}

Интерфейс автомобиля:

public interface Vehicle extends Remote {
    public void addNote(NoteInterface note) throws RemoteException;
    public List<NoteInterface> getListNote() throws RemoteException;
}

Класс автомобиля:

public class Car extends UnicastRemoteObject implements Vehicle {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private final List<NoteInterface> listNotes;

    public Car(){
        this.listNotes = new ArrayList<>();
    }

    @Override
    public final void addNote(NoteInterface note) throws RemoteException {
        Objects.requireNonNull(note, "Note can't null");
        listNotes.add(note);
    }

    @Override
    public List<NoteInterface> getListNote() throws RemoteException {
        return listNotes;
    }
}

Класс сервера:

public class Server {

    public static void main(String[] args) throws UnknownHostException, RemoteException, MalformedURLException {
        Registry registry = LocateRegistry.createRegistry(1099);

        Vehicle v = new Car();

        String url = "rmi://" + InetAddress.getLocalHost().getHostAddress() + "/project";
        registry.rebind(url+"/vehicles", v);

        System.out.println(url);
    }
}

Класс клиента:

public class Client {

    public static void main(String[] args) throws NotBoundException, IOException{
        String url = "rmi://" + InetAddress.getLocalHost().getHostAddress() +,"/project";
        Registry registry = LocateRegistry.getRegistry();

        Vehicle v = (Vehicle ) registry.lookup(url + "/vehicles");
}

Клиентская сторона, если я это сделаю:

v.addNote (новая заметка («Этот автомобиль великолепен», 10));

v.addNote (новая заметка («этот автомобиль очень плохой», 0));

v.getListNote () размер (). // это показывает мне 2

Если я это сделаю:

* * 1033 System.out.println (v.getListNote () получить (0).); // это показывает мне

Proxy [NoteInterface, RemoteObjectInvocationHandler [UnicastRef [liveRef: [Конечная точка: 192.168.1.11: +51593, ObjId: [- 25af4c2d: 166df1339f1: -7ffd, 1351068100677398612]]]]]

И как только я вызову метод заметки, например:

System.out.println (list.get (0) .getComment ()

У меня есть java.rmi.ConnectException

Исключение в потоке "AWT-EventQueue-0" java.lang.IllegalArgumentException: java.rmi.ConnectException: Отказано в соединении с хостом: 192.168.1.11; Вложенное исключение: java.net.ConnectException: в соединении отказано: connect

Я не понимаю, откуда возникла эта проблема, и я не знаю, как ее решить. Если у кого-то есть идея, спасибо за помощь.

...