2013-10-26 3 views
0

Я пытаюсь запустить свой сервер с именем SampleServer. Я использую окно и это то, что я сделал:RMI (java.net.ConnectException: Connection failed: connect)

в CMD:

javaw rmiregistry 1099 
cd C:\Users\Home\workspace\RMI\src 
java -Djava.security.policy=policy SampleServer 1099 

я получаю следующее сообщение об ошибке:

binding //localhost:1099/Sample 
New instance of Sample created 
Sample server failed:Connection refused to host: localhost; nested exception is: 

     java.net.ConnectException: Connection refused: connect 

Я пробовал использовать другой порт #, такие как 4719 для rmiregistry, но я получаю ту же ошибку. Я убедился, что мой брандмауэр отключен, но проблема сохраняется. Я убедился, что порт еще не используется. Я действительно надеюсь, что кто-то может мне помочь.

Изображение моего рабочего стола с папками проекта, затмение окна и ЦМД открытым: http://s22.postimg.org/uq00qzslr/picyture.png

Код:

SampleServer:

import java.rmi.Naming; 
import java.rmi.RemoteException; 
import java.rmi.RMISecurityManager; 
import java.rmi.server.UnicastRemoteObject; 

public class SampleServer { 
    public static void main(String args[]) { 
     if (args.length != 1) { 
      System.err.println("usage: java SampleServer rmi_port"); 
      System.exit(1); 
     } 
     // Create and install a security manager 
     if (System.getSecurityManager() == null) 
      System.setSecurityManager(new RMISecurityManager()); 
     try { 
      // first command-line argument is the port of the rmiregistry 
      int port = Integer.parseInt(args[0]); 
      String url = "//localhost:" + port + "/Sample"; 
      System.out.println("binding " + url); 
      Naming.rebind(url, new Sample()); 
      // Naming.rebind("Sample", new Sample()); 
      System.out.println("server " + url + " is running..."); 
     } 
     catch (Exception e) { 
      System.out.println("Sample server failed:" + e.getMessage()); 
     } 
    } 
} 

SampleClient:

import java.rmi.Naming; 
import java.rmi.RemoteException; 

public class SampleClient { 
    public static void main(String args[]) { 
     try { 
      if (args.length < 3) { 
       System.err.println("usage: java SampleClient host port string... \n"); 
       System.exit(1); 
      } 

      int port = Integer.parseInt(args[1]); 
      String url = "//" + args[0] + ":" + port + "/Sample"; 
      System.out.println("looking up " + url); 

      SampleInterface sample = (SampleInterface)Naming.lookup(url); 

      // args[2] onward are the strings we want to reverse 
      for (int i=2; i < args.length; ++i) 
       // call the remote method and print the return 
       System.out.println(sample.invert(args[i])); 
     } catch(Exception e) { 
      System.out.println("SampleClient exception: " + e); 
     } 
    } 
} 

SampleInterface :

import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface SampleInterface extends Remote { 
    public String invert(String msg) throws RemoteException; 
} 

Пример:

import java.rmi.Remote; 
import java.rmi.RemoteException; 
import java.rmi.server.*; 

// this is the class with remote methods 

public class Sample 
    extends UnicastRemoteObject 
    implements SampleInterface { 

    private int a; 

    public Sample() throws RemoteException { 
    System.out.println("New instance of Sample created"); 
    a = 1; 
    } 

    public String invert(String m) throws RemoteException { 
     // return input message with characters reversed 
     System.out.println("invert("+m+") a=" + a); 
     return new StringBuffer(m).reverse().toString(); 
    } 
} 

политика:

grant { 
    permission java.security.AllPermission; 
}; 

ответ

1

javaw rmiregistry 1099

Остановка прямо там. Это уже неправильно. «rmiregistry» - это исполняемый файл, а не имя класса Java, которое вы можете выполнить с помощью «java» или «javaw». Просто используйте 'rmiregistry'.

+0

, но затем я получаю: попытка не распознается как внутренняя или внешняя команда. Я думал, что команда для запуска была запущена rmiregistry, или если это не сработало, чего нет в моем случае, javaw rmiregistry). Является ли конкретная загрузка, которая мне нужна, чтобы сделать эту работу или конкретный каталог? – user2644819

+1

'try' * не * внутренняя или внешняя команда. Убери это. Здесь нет ничего, что говорит об использовании этого. Команда, которую вы хотите, это «rmiregistry». Очевидно, вы не выполняли то, что, по вашему мнению, выполняете. – EJP

1

Эта ошибка возникает, если на порту нет службы, которую вы пытаетесь подключить. Как сказано в EJP, rmiregistry является инструментом, который может быть запущен rmiregistry & в фоновом режиме (JDK 7). Я бы рекомендовал вам проверить ваш брандмауэр или проблему подключения с портом.

+0

Поскольку он фактически не запустил Реестр правильно, нет необходимости постулировать какие-либо дополнительные механизмы сбоя. – EJP

+0

ОК, я просто хотел помочь ему. это оно. – Keerthivasan

+0

Вы никому не поможете, подняв нерелевантный вопрос. – EJP

Смежные вопросы