2014-12-11 1 views
3

Я пытался использовать RMI, вот серверная сторона. сначала она работала без каких-либо исключений, но теперь после того, как три раза, когда я пытаюсь запустить код, приведенный ниже, я буду получать некоторые ошибкиjava.rmi.ConnectException: Соединение отказано в размещении: 127.0.0.1

Код является:

import java.rmi.server.UnicastRemoteObject; 

/** 
* Created by elyas on 12/11/14 AD. 
*/ 
public class LogicImplement extends UnicastRemoteObject implements Logic 
{ 

    public LogicImplement() throws Exception 
    { 
     java.rmi.registry.LocateRegistry.createRegistry(6060); 
     java.rmi.Naming.rebind("Object1",this); 
    } 

    @Override 
    public int sum(int a, int b) throws Exception 
    { 
     int result = a + b; 
     System.out.println("ana sum executed"); 
     return result; 
    } 

    public static void main(String[] args) 
    { 
     try 
     { 
      LogicImplement logicImplement = new LogicImplement(); 
     } catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

ошибка выглядит так: Я ve попытался изменить Object1 на, например Object2, но снова я получу ошибку, также я могу изменить номер порта ...

Что такое решение?

java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
    java.net.ConnectException: Connection refused 
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) 
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) 
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) 
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:341) 
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) 
    at java.rmi.Naming.rebind(Naming.java:177) 
    at LogicImplement.<init>(LogicImplement.java:12) 
    at LogicImplement.main(LogicImplement.java:27) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: java.net.ConnectException: Connection refused 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at java.net.Socket.connect(Socket.java:528) 
    at java.net.Socket.<init>(Socket.java:425) 
    at java.net.Socket.<init>(Socket.java:208) 
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) 
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:147) 
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) 
    ... 12 more 

ответ

2

Ответ был очень простым. По умолчанию реестр запускается на порте 1099. Чтобы запустить реестр на другом порту, укажите номер порта в командной строке. Не забудьте отключить переменную среды CLASSPATH. Для получения дополнительной информации посетите эту ссылку: Running the Example Programs

** Таким образом, для фиксации этого кода я должен изменить порт форму номера 6060 1099

уведомления, что: если 1099 используется другими службами, вы должны проверить 1100 и если используется 1100, вы используете 1101 и т. д. :-)

2
java.net.ConnectException: Connection refused 

Там может быть несколько причин для этого исключения:

  • Вы еще не начали ваш rmiregistry в фоновом режиме.
  • Вы пытаетесь подключиться к неправильному номеру порта.
  • Ваш брандмауэр может блокировать соединения.
+0

, если это из-за межсетевым экраном, что я должен делать? что вы подразумеваете под неправильным номером порта? –

+0

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

+1

@DarshanLila. Не будет проблемы с брандмауэром 127.0.0.1. – EJP

0

Вы еще не запустили реестр RMI.

Когда вы пройдете мимо этого, если это все еще происходит при вызове удаленного метода, см. item A.1 of the RMI FAQ.

+1

Как мне запустить RMI Registry? Я не получил тебя :( –

0

Поскольку это был вопрос номер порта, есть другой способ, чтобы начать регистрацию на номер порта, который вы хотите:

java.rmi.registry.Registry rmiRegistry = java.rmi.registry.LocateRegistry. 
       createRegistry(6060); // Creates a registry on 6060 
rmiRegistry.rebind("Object1",this); // Binds to registry created on 6060