мы пытаемся заставить RMI работать через Интернет. Что мы пробовали:
наш интерфейс RMI:
import java.rmi.RemoteException;
public interface RMIInterface extends java.rmi.Remote {
public void helloWorld(int i) throws RemoteException;
}
наша реализация RMI-сервера:
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class RMIServerTest extends UnicastRemoteObject implements RMIInterface {
public RMIServerTest() throws RemoteException {
}
@Override
public void helloWorld(int i) throws RemoteException {
for (int j = 0; j < i; j++) {
System.out.println("Hello World");
}
}
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
}
catch (RemoteException ex) {
System.out.println(ex.getMessage());
}
try {
Naming.rebind("Server", new RMIServerTest());
} catch (MalformedURLException ex) {
System.out.println(ex.getMessage());
} catch (RemoteException ex) {
System.out.println(ex.getMessage());
}
}
}
и наш Клиент:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class RMIClient {
public static void main(String[] args) throws RemoteException, NotBoundException,MalformedURLException {
try {
RMIInterface serverObject = (RMIInterface) Naming.lookup("//externalServerAdress/Server");
serverObject.helloWorld(10);
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Мы все еще получаем эту ошибку:
Connection refused to host: 192.168.0.13; nested exception is:
java.net.ConnectException: Connection timed out: connect
192.168.0.13 - локальный IP-адрес сервера за его маршрутизатором. Мы подключаемся к клиенту с внешним IP-адресом маршрутизатора. например "2.246.133.155" = внешнийСервер. Таким образом, у нас есть связь. Мы подключаемся по внешнему IP-адресу сервера (WAN IP), а ошибка показывает, он получает локальный IP-адрес сервера, но все же отказывается от соединения.
спасибо для любого намека.
Connection refused to host: 192.168.0.13
Это не интернет-адрес. Это частный адрес, который существует только за вашим маршрутизатором. Вам необходимо использовать общедоступный IP-адрес и организовать перенаправление портов через ваш маршрутизатор.