Как клиент подключиться к серверу в Java RMI?

введите описание изображения здесьЯ разрабатываю простое приложение телефонной книги в RMI. Я могу запустить реестр RMI и класс заглушки также генерируется для реализации c1ass. Теперь я запустил сервер с помощью команды Java PhoneBookServer в моей командной строке. Следующим шагом является запуск клиента, поэтому после того, как я запустил клиент, возникает следующая ошибка! Как клиентские, так и серверные программы находятся в одной папке введите описание изображения здесь

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

     import java.rmi.*;
     import java.rmi.server.*;

     public class PhoneBookServer {
     public static void main  (String[] args){

    /*Create and install a security manager

      SecurityManager appsm = System.getSecurityManager();
          if(appsm==null){

          System.setSecurityManager(new RMISecurityManager()); 

       }*/

       System.out.println("Server is started");

     try
      {
        //create PhoneBookImpl
        PhoneBookImpl Pb=new PhoneBookImpl();
        Naming.rebind("rmi://127.0.0.1:1099/PhoneBook", Pb);
      }
        catch(Exception e)
       {
          System.out.println("Exception is:" +e);
     }

     }

    }

Клиентская программа

     import java.rmi.*;
     import java.rmi.registry.*;
     import java.rmi.server.*;
     import java.lang.*;
     import java.io.*;
     import java.util.Scanner;

     public class PhoneBookClient {
     public static void main  (String[] args) throws Exception
     {

      /*Create and install a security manager

          SecurityManager appsm = System.getSecurityManager();
          if(appsm==null){
                  System.setSecurityManager(new RMISecurityManager()); 

       }*/

      String name,number,total,choice,id;
      String ch;
      PhoneBook pb=(PhoneBook)Naming.lookup("rmi://127.0.0.1:1099"+"/PhoneBook");
      Scanner in=new Scanner(System.in);
      System.out.println("1.Enter new record /n");
      System.out.println("2.Look up record /n");
      System.out.println("3.Delete record /n");
      System.out.println("Enter your option");
      ch=in.nextLine();

      if(ch.equals("1")){
      do{
         System.out.println("Enter unique id:");
         id=in.nextLine();
         System.out.println("Enter name:");
         name=in.nextLine();
         System.out.println("Enter phone number:");
         number=in.nextLine();
         total=name+"  "+number;
         pb.new_record(id,total);
         System.out.println("Enter 'q' to quit or enter 'p' to proceed");
         choice=in.nextLine();
         }while(!choice.equals("q"));

       }
      if(ch.equals("2")){
         do{
          System.out.println("Enter id to look up a record"+"  enter 'q' to quit");
          id=in.nextLine();
          String record=pb.lookup_record(id);
          System.out.println("The record is" +record);
          }while(!id.equals("q"));
                      }

     if(ch.equals("2")){
        do{
          System.out.println("Enter id to delete a record"+"  enter 'q' to quit");
          id=in.nextLine();
          pb.lookup_record(id);
          System.out.println("The record is deleted");
        }while(!id.equals("q"));

                   }
         }
      }

Ранее я получил исключение:

Connection refused to the host127.0.0.1 access denied.

Поэтому я устанавливаю средство безопасности в своих клиентских и серверных программах. Теперь я получаю этот новый тип исключения. Как я могу решить проблему.

1 ответ

Решение

Избавьтесь от менеджера безопасности. Вам не нужно это в этой конфигурации. Избавьтесь от обеих установок диспетчера безопасности на сервере: вы можете установить только одну; и избавиться от этого в клиенте тоже.

Я не понимаю, как этот серверный код вообще может работать с двумя менеджерами безопасности. Это не может быть реальным кодом.

Другие вопросы по тегам