2013-10-29 4 views
0

enter image description here RMI에서 간단한 전화 번호부 응용 프로그램을 개발 중입니다. 나는 RMI 레지스트리를 시작할 수 있으며 스텁 클래스도 구현 클래스에 대해 생성된다. 이제 cmd 프롬프트에서 Java PhoneBookServer 명령을 사용하여 서버를 시작했습니다. 다음 단계는 클라이언트를 시작하는 것입니다. 그래서 클라이언트를 시작한 후에 다음과 같은 오류가 발생합니다! 모두 클라이언트와 서버 프로그램은 하나의 폴더에 enter image description here클라이언트가 Java RMI에서 서버에 연결하는 방법은 무엇입니까?

이전

 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. 

그래서 내 cl에 보안 mnager를 설치합니다. ient 및 server 프로그램. 이제이 새로운 유형의 예외가 발생합니다. 문제를 어떻게 해결할 수 있습니까?

+0

위의 질문에서 "이미지 설명 입력"을 클릭하면 cmd 프롬프트에서 오류를 볼 수 있습니다. –

+0

새로운 예외는 무엇입니까? 무슨 문제? 예외 사항과 코드 *를 여기에 게시하십시오. * 대부분의 사람들은 링크를 따라 다니지 않아도되며 관련 자료가 모두 포함되어 있지 않으면 질문에 영구적 인 가치가 없습니다. – EJP

+0

http://stackoverflow.com/questions/2427473/java-rmi-accesscontrolexception-access-denied –

답변

0

보안 관리자를 제거하십시오. 이 구성에서는 필요하지 않습니다. 을 제거하십시오. 보안 관리자가 서버에 설치됩니다. 하나만 설치할 수 있습니다. 클라이언트에서도 제거하십시오.

서버 코드가 두 보안 관리자와 함께 작동하는 방법을 전혀 알지 못합니다. 그것은 실제 코드가 될 수 없습니다.

+0

클라이언트와 서버 모두에서 하나의 보안 관리자를 제거했습니다. 이제 서버를 시작할 때 예외가 발생합니다. java PhoneBookServer 'java.security.AccessControlException : 액세스가 거부되었습니다. (java.net.SocketPermission 127.0.0.1:1099 연결, 해결)' –

+0

Yon은 보안 관리자가 설치되었습니다. 나는 특별히 서버에서 * 두 *를 제거하라고 말했습니다. – EJP

+0

먼저 보안 관리자없이 시도한 후 서버에 오류 액세스가 거부 된 것으로 표시되어 보안 관리자가 설치되어 연결될 수 있지만 여전히 동일한 예외가 표시됩니다. –