简体   繁体   中英

How to set various parameters for Java RMI based communication?

While performing a client-server communication with various forums, I am unable to perform Remote-object's lookup on the client machine.

The errors which I receive are ConnectIOException(NoRouteToHostException), and sometimes ConnectException and sometimes someother.

This is not what I want to ask. But, the main concern is how should I setup client platform and server platform --- talking about networking details --- this is what I doubt interferes with my connection.

My questions :-

  1. How should I edit my /etc/hosts file on both client-side and server-side? Server's IP- 192.168.1.8 & Client's IP-192.168.1.100. Means, should I add the system name in both the files:

     192.168.1.8 SERVER-1 # on the server side 192.168.1.100 CLIENT-1 # on the client side 

    Should I edit like this? Can this be one of the possible concerns? I just want to remove any doubts left over to perform the rmi-communication!

  2. Also, I am also setting Server's hostname property using System.setProperty("java.rmi.server.hostname",192.168.1.8); on the server side. Should I do the same on the client-side too?

  3. I've read about setting classpath while running the java program on both server-side as well as the client-side. I did this too,but,again the same exceptions. No difference at all. I've read that since Java update 6u45, classpaths aren't necessary to include! Please throw some light on this too...

  4. If I am missing something, Please enlighten about the same too. A brief idea/link to resources are most preferred.

You don't need any of this unless you have a problem. The most usual problem is the one described in the RMI FAQ #A.1 , and editing the hosts file of the server or setting java.rmi.server.hostname in the server JVM is the solution to that.

'No route to host' is a network connectivity problem, not an RMI problem, and not one you'll solve with code or system property settings.

Setting the classpath has nothing to do with network problems.

Here is server example of which transfers an concrete class. This class must be exist in server and client classpath with same structure

Message: public class MyMessage implements Serializable {

private static final long serialVersionUID = -696658756914311143L;

public String Title;
public String Body;


public MyMessage(String strTitle) {
    Title = strTitle;
    Body = "";
}

public MyMessage() {
    Title = "";
    Body = "";
}

}

And here is the server code that gets an message and returns another message:

public class SimpleServer {

public String ServerName;
ServerRemoteObject mRemoteObject;

public SimpleServer(String pServerName) {
    ServerName = pServerName;
}

public void bindYourself() {
    try {
        mRemoteObject = new ServerRemoteObject(this);
        java.rmi.registry.Registry iRegistry = LocateRegistry.getRegistry(RegistryContstants.RMIPort);
        iRegistry.rebind(RegistryContstants.CMName, mRemoteObject);
    } catch (Exception e) {
        e.printStackTrace();
        mRemoteObject = null;
    }
}

public MyMessage handleEvent(MyMessage mMessage) {
    MyMessage iMessage = new MyMessage();
    iMessage.Body = "Response body";
    iMessage.Title = "Response title";
    return iMessage;
}

public static void main(String[] server) {

    SimpleServer iServer = new SimpleServer("SERVER1");
    iServer.bindYourself();

    while (true) {
        try {
            Thread.sleep(10000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

}

and here is the remote interface of server remote object:

public interface ISimpleServer extends java.rmi.Remote{

public MyMessage doaction(MyMessage message) throws java.rmi.RemoteException;

}

all you need is adding MyMessage class both in server and client classpath.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM