Реестр RMI подключается не по адресу - PullRequest
2 голосов
/ 31 мая 2011

Я пытаюсь запустить простое приложение rmi.Однако я столкнулся с необъяснимой (для меня) ошибкой.

У меня есть мой объект CheckerImplementation, который реализует удаленный интерфейс Checker.Я пытаюсь настроить его с помощью этого кода [Instance () возвращает объект типа CheckerImplementation]:

            try 
            {
                Checker stub = (Checker) UnicastRemoteObject.exportObject(Instance(), 0);

                // Bind the remote object's stub in the registry
                Registry registry = LocateRegistry.getRegistry();
                registry.bind("Checker", stub);

                System.err.println("Server ready");
            } 
            catch (Exception e) 
            {
                System.err.println("Server exception: " + e.toString());
                e.printStackTrace();
            }

При запуске я получаю следующее исключение:

java.rmi.ConnectException: Connection refused to host: 10.105.124.34; 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.bind(Unknown Source)
at Checker.CheckerImplementation.main(CheckerImplementation.java:172)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
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)
... 5 more

ПочемуJava пытается подключиться к 10.105.124.34 в любом случае?Это не localhost.Что может быть причиной и как это можно исправить?

После некоторых экспериментов я понял, что 10.105.124.34 действительно является моим IP-адресом.Но остается вопрос: почему не 127.0.0.1?

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Вы уверены, что 10.105.124.34 не ваш локальный IP? Запустите ifconfig / ipconfig. Это код, который отвечает за выбор этого адреса (java.rmi.registry.LocateRegistry#getRegistry):

if (port <= 0)
    port = Registry.REGISTRY_PORT;

if (host == null || host.length() == 0) {
    // If host is blank (as returned by "file:" URL in 1.0.2 used in
    // java.rmi.Naming), try to convert to real local host name so
    // that the RegistryImpl's checkAccess will not fail.
    try {
       host = java.net.InetAddress.getLocalHost().getHostAddress();
    } catch (Exception e) {
       // If that failed, at least try "" (localhost) anyway...
       host = "";
    }

Чтобы подвести итог: вам нужен локальный реестр RMI (сервер), работающий на вашем компьютере. Видимо, вы пытаетесь подключиться к нему (порт 1099), но ни один не работает.

1 голос
/ 31 мая 2011

Ну, вы можете быть совершенно уверены, что он выдает это исключение, потому что он пытается по какой-то причине подключиться к 10.105.124.34, и он не работает.

Вот предложение: какой IP-адрес на машине?на котором ты это запускаешь?10.105.124.34 находится в старой сети класса BBN A, которую в настоящее время каждый использует в качестве анонимной сети внутри NAT, поэтому держу пари, что именно ваш маршрутизатор назначает вашу машину через DHCP.(Подсказка: ifconfig в UNIX, ipconfig в Windows.)

Если да, действительно ли вы используете службу RMI?Что будет отвечать на вызов, когда вы связываете?

0 голосов
/ 08 апреля 2012

Пуск -> cmd -> rmiregistry, закройте 2 окна cmd.Запустите код вашего сервера снова.

...