Java.rmi.ConnectException: Connection refused host: 127.0.0.1

I tried to use RMI, here is the server side. at first it worked without any exceptions, but now after three times when I try to run the below code, I get some errors.

Code:

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();
        }
    } 
} 

      

The error looks like this: I tried to change Object1 to for example Object2, but again I get the error, also I changed the port number ...

What is the solution?

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

      

+3


source to share


4 answers


The answer was very simple. By default, the registry runs on port 1099. To run the registry on a different port, specify the port number on the command line. Remember to disable the CLASSPATH environment variable. for more information check this link: Running example programs

** So, to fix this code, I have to change the port number from 6060 to 1099



note that: if 1099 is used by other services, you need to test 1100, and if 1100 is used, you are using 1101, etc .:-)

+2


source


java.net.ConnectException: Connection refused

      

There can be several reasons for this exception:



  • You haven't started yours rmiregistry

    in the background.
  • You are trying to connect to the wrong port number.
  • Your firewall might be blocking connections.
+2


source


You haven't started the RMI registry.

When you are done with this, if this is still happening when the remote method is called, see item A.1 of the RMI FAQ .

0


source


Since this was a port number issue, there is another way to run the registry on the desired port number:

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

      

0


source







All Articles