Je travaille sur un client RMI léger, mais lorsque j'essaie de m'y connecter à partir d'une machine autre que localhost, j'obtiens une trace de connexion refusée. J'ai vérifié que mon pare-feu est désactivé. Que dois-je faire d'autre ? Y a-t-il une sécurité que je dois configurer pour RMI ?
Server.java
package com.ibm.icm.autoconfig.server.rmi;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.ExportException;
import java.rmi.server.UnicastRemoteObject;
public final class Server extends Commands implements ServerHook {
private Registry registry;
public static void main(String[] args) throws RemoteException {
Server server = new Server();
server.Start();
}
private void Start() throws RemoteException {
ServerHook serverHook = (ServerHook) UnicastRemoteObject.exportObject(this, 0);
// Add serverHook to the local registry -- attempt to create registry
// instance, if it fails to create, try finding an existing one
try {
registry = LocateRegistry.createRegistry(1099);
} catch (ExportException ee) {
registry = LocateRegistry.getRegistry(1099);
}
registry.rebind("ServerHook", serverHook);
System.out.println("Server Running...");
while (true) {
}
}
}
ServerHook.java
package com.ibm.icm.autoconfig.server.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ServerHook extends Remote {
public boolean write(String msg) throws RemoteException;
}
Client.java
package com.ibm.icm.autoconfig.client.rmi;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import com.ibm.icm.autoconfig.server.rmi.ServerHook;
public class Client {
private ServerHook serverHook;
public static void main(String[] args) throws RemoteException, NotBoundException {
Client client = new Client();
client.connectTo("localhost");
client.writeServer("Hello Server!");
}
private void connectTo(String serverHost) throws RemoteException, NotBoundException {
Registry registry = LocateRegistry.getRegistry();
serverHook = (ServerHook) registry.lookup("ServerHook");
}
private void writeServer(String msg) throws RemoteException {
serverHook.write(msg);
}
}
Trace de pile pour RMI non local :
Exception in thread "main" java.rmi.ConnectException: Connection refused to host: 9.65.186.135; nested exception is:
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at com.ibm.icm.autoconfig.client.rmi.Client.connectTo(Client.java:21)
at com.ibm.icm.autoconfig.client.rmi.Client.main(Client.java:15)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
... 7 more