Почему мой сервер RMI завершает работу, прежде чем клиент сможет подключиться?

После запуска программы для запуска на указанном порту, программа завершает работу, прежде чем клиент сможет подключиться к нему.

    try {
        StudentService obj = new StudentService();
        Registry r = LocateRegistry.createRegistry(4200);
        r.bind("localhost", obj);

    } catch (RemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (AlreadyBoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Это метод, который находится в классе StudentService, который был переопределен.

int multiply(int s, int b) throws RemoteException {
    return s * b;
}

1 ответ

Решение

Из документации,

UnicastRemoteObject.exportObject экспортирует предоставленный удаленный объект для получения входящих вызовов удаленного метода на анонимный порт TCP и возвращает заглушку для удаленного объекта для передачи клиентам

Поэтому неудивительно, что ваша программа завершилась без прослушивания входящих соединений. Это должно работать.

try {
    StudentService obj = new StudentService();
    UnicastRemoteObject.exportObject(obj, 0);

    Registry r = LocateRegistry.createRegistry(4200);
    r.bind("localhost", obj);

} catch (RemoteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (AlreadyBoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Другие вопросы по тегам