Java RMI через Интернет. хост отказаться от подключения

1

мы пытаемся заставить RMI работать через Интернет. Что мы пробовали:

  1. Переадресация портов (1099-1100) на клиент и сервер.
  2. отключить межсетевой экран в окнах и маршрутизаторе
  3. попробовал его с помощью tunngle (www.tunngle.net/)

наш интерфейс 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-адрес сервера, но все же отказывается от соединения.

спасибо для любого намека.

Теги:
rmi

1 ответ

0
Connection refused to host: 192.168.0.13

Это не интернет-адрес. Это частный адрес, который существует только за вашим маршрутизатором. Вам необходимо использовать общедоступный IP-адрес и организовать перенаправление портов через ваш маршрутизатор.

  • 0
    подключаем на клиенте с IP-адресом маршрутизатора сети сервера. мы действительно не знаем, почему мы получаем здесь локальный IP-адрес сервера за его маршрутизатором. но это не может быть волшебством, поэтому связь существует. (Я отредактировал оригинальное сообщение, чтобы сделать его более понятным)
  • 0
    В этом случае вам нужно прочитать пункт A.1 RMI FAQ .
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню