Как клиент подключиться к серверу в 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 ответ
Избавьтесь от менеджера безопасности. Вам не нужно это в этой конфигурации. Избавьтесь от обеих установок диспетчера безопасности на сервере: вы можете установить только одну; и избавиться от этого в клиенте тоже.
Я не понимаю, как этот серверный код вообще может работать с двумя менеджерами безопасности. Это не может быть реальным кодом.