проблема в запуске моего сервера RMI (под ISP), чтобы он мог принимать удаленные вызовы через Интернет - PullRequest
0 голосов
/ 03 апреля 2010

я создаю приложение клиент / сервер, в котором мой сервер и клиент могут находиться на одном и том же или на разных компьютерах, но оба находятся под ISP.

Мои программы RMI: -

-RemoteIntreface: -

//Calculator.java
public interface Calculator 
      extends java.rmi.Remote { 
public long add(long a, long b) 
    throws java.rmi.RemoteException; 

public long sub(long a, long b) 
    throws java.rmi.RemoteException; 

public long mul(long a, long b) 
    throws java.rmi.RemoteException; 

public long div(long a, long b) 
    throws java.rmi.RemoteException; 

}

Реализация удаленного интерфейса: -

//CalculatorImpl.java
public class CalculatorImpl 
extends 
  java.rmi.server.UnicastRemoteObject 
implements Calculator { 

public CalculatorImpl() 
    throws java.rmi.RemoteException { 
    super(); 
} 

public long add(long a, long b) 
    throws java.rmi.RemoteException { 
    return a + b; 
} 

public long sub(long a, long b) 
    throws java.rmi.RemoteException { 
    return a - b; 
} 

public long mul(long a, long b) 
    throws java.rmi.RemoteException { 
    return a * b; 
} 

public long div(long a, long b) 
    throws java.rmi.RemoteException { 
    return a / b; 
} 

}

Сервер: -

//CalculatorServer.java
 import java.rmi.Naming;
 import java.rmi.server.RemoteServer;
 public class CalculatorServer {

  public CalculatorServer(String IP) 
  {
    try {

         Calculator c = new CalculatorImpl();

         Naming.rebind("rmi://"+IP+":1099/CalculatorService", c);
        } catch (Exception e) 
          {
            System.out.println("Trouble: " + e);
          }
  }

     public static void main(String args[]) {
     new CalculatorServer(args[0]);
   }
}

Клиент: -

//CalculatorClient.java

 import java.rmi.Naming; 
 import java.rmi.RemoteException; 
 import java.net.MalformedURLException; 
 import java.rmi.NotBoundException; 

  public class CalculatorClient { 

  public static void main(String[] args) { 
    try { 
       Calculator c = (Calculator)Naming.lookup("rmi://"+args[0]+"/CalculatorService"); 

        System.out.println( c.sub(4, 3) ); 
        System.out.println( c.add(4, 5) ); 
        System.out.println( c.mul(3, 6) ); 
        System.out.println( c.div(9, 3) ); 
    } 
    catch (MalformedURLException murle) { 
        System.out.println(); 
        System.out.println("MalformedURLException"); 
        System.out.println(murle); 
    } 
    catch (RemoteException re) { 
        System.out.println(); 
        System.out.println("RemoteException"); 
        System.out.println(re); 
    } 
    catch (NotBoundException nbe) { 
        System.out.println(); 
        System.out.println("NotBoundException"); 
        System.out.println(nbe); 
    } 
    catch (java.lang.ArithmeticException ae) { 
        System.out.println(); 
        System.out.println("java.lang.ArithmeticException"); 
        System.out.println(ae); 
    } 
} 

}

, когда серверные и клиентские программы находятся на одном компьютере: -

я запускаю серверную программу, передавая статический IP-адрес маршрутизатораадрес: -192.168.1.35 в аргументах [0], и мой сервер запускается ... нормально.

и, передавая тот же статический IP-адрес в аргументы моего клиента [0], также работает нормально.

но: -

, когда серверная и клиентская программы находятся на разных компьютерах: -

сейчас я пытаюсь запустить мою серверную программу, передав ее публичный IP-адрес: 59.178.198.247 в аргументах [0], чтобы он мог принимать вызовы через Интернет.
, но я не могу его запустить.

и возникает следующее исключение: -

Trouble: java.rmi.ConnectException: Connection refused to host: 59.178.198.247;
nested exception is:
    java.net.ConnectException: Connection refused: connect

Я думаю, что это связано с проблемой NAT, потому что я нахожусь под ISP.

Итак, моя проблема в том, как мне запустить сервер RMI под ISP, чтобы он мог принимать удаленные вызовыиз интернета ????

Ответы [ 2 ]

0 голосов
/ 03 апреля 2010

Попробуйте проверить, виден ли ваш порт (1099) (например, вы можете использовать это ). Если нет, используйте открытый порт или измените конфигурацию брандмауэра или маршрутизатора (может потребоваться настроить переадресацию портов). Если это так, загляните в свою политику безопасности RMI.

0 голосов
/ 03 апреля 2010

Предположительно, ваш интернет-провайдер блокирует соединение. Вам придется поговорить с ними.

...