Запустить сообщение об ошибке клиента RMI
У меня есть исправление упражнения, которое мы делали в классе, поэтому оно должно работать нормально. Но я не в состоянии выполнить это должным образом.
Когда я запускаю удаленный объект, все в порядке, у меня на экране появляется сообщение, показывающее, как он работает, но когда я запускаю клиент после этого, я вижу эту ошибку:
**java.rmi.ConnectException: Connection refused to host: Sony-PC; 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 java.rmi.Naming.lookup(Unknown Source)
at fr.unice.miage.m1.distributedsystems.tp3.client.Client.main(Client.java:16)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(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**
Я в отчаянии, я попробовал все. Может быть, кто-то может рассказать мне шаг за шагом, как заставить это работать. Спасибо за вашу помощь!
Вот удаленный интерфейс:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IRemote extends Remote {
void echo() throws RemoteException;
void echo(int value) throws RemoteException;
String getRemoteAddress() throws RemoteException;
}
КЛАСС удаленного объекта:
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.rmi.AlreadyBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class RemoteObject extends UnicastRemoteObject implements IRemote {
private static final long serialVersionUID = 1L;
protected RemoteObject() throws RemoteException {
super();
}
@Override
public void echo() throws RemoteException {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("RemoteObject.echo()");
}
@Override
public void echo(int value) throws RemoteException {
System.out.println("RemoteObject.echo() value=" + value);
}
@Override
public String getRemoteAddress() throws RemoteException {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
return "Unknown";
}
}
public static void main(String[] args) throws RemoteException,
MalformedURLException, AlreadyBoundException {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
int rmiRegistryPort = 1099;
// the rmiregistry can either be created programmatically or started
// manually before each run if you have some time to waste
Registry registry = LocateRegistry.createRegistry(rmiRegistryPort);
System.out.println("RMI registry listening on port " + rmiRegistryPort);
RemoteObject remoteObject = new RemoteObject();
registry.bind("myremoteobject", remoteObject);
}
}
Класс клиента
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import fr.unice.miage.m1.distributedsystems.tp3.server.IRemote;
public class Client {
public static void main(String[] args) {
try {
IRemote distante =
(IRemote) Naming.lookup("rmi://"+java.net.InetAddress.getLocalHost()+"/myremoteobject");
System.out.println("Client.main() before echo remote call");
distante.echo();
System.out.println("Client.main() after echo remote call");
distante.echo(7);
System.out.println("Remote object IP: "
+ distante.getRemoteAddress());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}