我在 java rmi 多客户端代码中遇到问题
i have a problem in a java rmi multiclient code
我正在编写 java rmi multi_client 代码,其中第一个客户端 (client1) 有权修改或创建对象,而第二个客户端 (client2) 可以访问创建的对象通过 client1 return 的主题可以看到它,但它不起作用
第一个客户class
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;
public class ChefDeDepartement {
static Scanner sc1 = new Scanner(System.in);
static Scanner sc2 = new Scanner(System.in);
static Scanner sc3 = new Scanner(System.in);
public static void main(String[] args)throws RemoteException, NotBoundException, MalformedURLException {
int i=0;
try
{
//java.rmi.registry.LocateRegistry.createRegistry(1000);
InterfaceChefDept c = (InterfaceChefDept)Naming.lookup("rmi://localhost/ImlementationInterfaceChefDept");
System.out.println("connection au serveur");
c.Ajouter("1ere avis");
c.Ajouter("2eme avis");
c.Ajouter("3eme avis");
List<String> avis = c.returnArrayList();
System.out.println("Bienvenu !!!!!!!!!!");
while(i==0){
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
//affichage*************************************************************
System.out.println("La liste des avis :");
List<String> listAvis = avis;
int j=0;
int k=0;
for(String e: listAvis){
j=j+1;
System.out.println(j + " :" + e);
}
//affichage*************************************************************
System.out.println("*********************");
System.out.println("**********");
System.out.println("choisire votre Action :");
System.out.println(" 1: Ajouter un avis \n");
System.out.println(" 2: Supprimer \n");
int choice = sc1.nextInt();
String newAvis;
int idAvis;
if (choice==1)
{
System.out.println("donner le nouvel avis : ");
newAvis = sc2.nextLine();
c.Ajouter(newAvis);
avis = c.returnArrayList();
/*
//affichage*************************************************************
System.out.println("La liste des avis :");
int l=0;
for(String f: avis){
l=l+1;
System.out.println(l + " :" + f);
}
//affichage*************************************************************
*/
}
if (choice==2)
{
System.out.println("donner l'indice de l'avis a supprimer ");
idAvis = sc3.nextInt();
System.out.println("scan done");
c.Supprimer(idAvis);
System.out.println("supp done ");
avis = c.returnArrayList();
/*
//affichage*************************************************************
System.out.println("La liste des avis :");
int n=0;
for(String f: avis){
n=n+1;
System.out.println(n + " :" + f);
}
//affichage*************************************************************
*/
}
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
成功客户class
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
public class Etudiant {
public static void main(String [] args) throws RemoteException {
try{
int i=0;
InterfaceChefDept c = (InterfaceChefDept) Naming.lookup("rmi://localhost/ImlementationInterfaceChefDept");
InterfaceEtudiant s = (InterfaceEtudiant) Naming.lookup("rmi://localhost/ServerDesAvis");
List<String> avis = c.returnArrayList();
List<String> lavis = s.AfficherAvis(avis);
System.out.println("La liste des avis disponibles :");
for(String f: lavis){
i=i+1;
System.out.println(i + " : " + f);
}
System.out.println(":) :) :) :) :) ");
}
catch(Exception e){
e.printStackTrace();
}
}
}
服务器class
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.util.ArrayList;
public class ServerDesAvis {
public static void main(String[] args) throws RemoteException,NotBoundException{
try
{
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ServerDesAvis", c);
ImplementationInterfaceEtudiant s = new ImplementationInterfaceEtudiant();
Naming.rebind("rmi://localhost/ServerDesAvis", s);
System.out.println("server is running");
System.out.println(".......");
System.out.println(".....");
System.out.println("...");
}
catch(RemoteException re){
re.printStackTrace();
}
catch(Exception e) {
System.out.println(e);
}
}
}
在 java ChefDepartement localhost 之后
我收到这个错误
java.rmi.NotBoundException: ImlementationInterfaceChefDept
您的 ImlementationInterfaceChefDept
RMI 服务器注册不正确。您将两者绑定到相同的 ServerDesAvis
端点:
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ServerDesAvis", c);
ImplementationInterfaceEtudiant s = new ImplementationInterfaceEtudiant();
Naming.rebind("rmi://localhost/ServerDesAvis", s);
... 这意味着第一个 (ImlementationInterfaceChefDept
) 将被第二个覆盖。您需要更换:
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ServerDesAvis", c);
...有了这个:
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ImlementationInterfaceChefDept", c);
希望对您有所帮助。
我正在编写 java rmi multi_client 代码,其中第一个客户端 (client1) 有权修改或创建对象,而第二个客户端 (client2) 可以访问创建的对象通过 client1 return 的主题可以看到它,但它不起作用 第一个客户class
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;
public class ChefDeDepartement {
static Scanner sc1 = new Scanner(System.in);
static Scanner sc2 = new Scanner(System.in);
static Scanner sc3 = new Scanner(System.in);
public static void main(String[] args)throws RemoteException, NotBoundException, MalformedURLException {
int i=0;
try
{
//java.rmi.registry.LocateRegistry.createRegistry(1000);
InterfaceChefDept c = (InterfaceChefDept)Naming.lookup("rmi://localhost/ImlementationInterfaceChefDept");
System.out.println("connection au serveur");
c.Ajouter("1ere avis");
c.Ajouter("2eme avis");
c.Ajouter("3eme avis");
List<String> avis = c.returnArrayList();
System.out.println("Bienvenu !!!!!!!!!!");
while(i==0){
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
//affichage*************************************************************
System.out.println("La liste des avis :");
List<String> listAvis = avis;
int j=0;
int k=0;
for(String e: listAvis){
j=j+1;
System.out.println(j + " :" + e);
}
//affichage*************************************************************
System.out.println("*********************");
System.out.println("**********");
System.out.println("choisire votre Action :");
System.out.println(" 1: Ajouter un avis \n");
System.out.println(" 2: Supprimer \n");
int choice = sc1.nextInt();
String newAvis;
int idAvis;
if (choice==1)
{
System.out.println("donner le nouvel avis : ");
newAvis = sc2.nextLine();
c.Ajouter(newAvis);
avis = c.returnArrayList();
/*
//affichage*************************************************************
System.out.println("La liste des avis :");
int l=0;
for(String f: avis){
l=l+1;
System.out.println(l + " :" + f);
}
//affichage*************************************************************
*/
}
if (choice==2)
{
System.out.println("donner l'indice de l'avis a supprimer ");
idAvis = sc3.nextInt();
System.out.println("scan done");
c.Supprimer(idAvis);
System.out.println("supp done ");
avis = c.returnArrayList();
/*
//affichage*************************************************************
System.out.println("La liste des avis :");
int n=0;
for(String f: avis){
n=n+1;
System.out.println(n + " :" + f);
}
//affichage*************************************************************
*/
}
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
成功客户class
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
public class Etudiant {
public static void main(String [] args) throws RemoteException {
try{
int i=0;
InterfaceChefDept c = (InterfaceChefDept) Naming.lookup("rmi://localhost/ImlementationInterfaceChefDept");
InterfaceEtudiant s = (InterfaceEtudiant) Naming.lookup("rmi://localhost/ServerDesAvis");
List<String> avis = c.returnArrayList();
List<String> lavis = s.AfficherAvis(avis);
System.out.println("La liste des avis disponibles :");
for(String f: lavis){
i=i+1;
System.out.println(i + " : " + f);
}
System.out.println(":) :) :) :) :) ");
}
catch(Exception e){
e.printStackTrace();
}
}
}
服务器class
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.util.ArrayList;
public class ServerDesAvis {
public static void main(String[] args) throws RemoteException,NotBoundException{
try
{
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ServerDesAvis", c);
ImplementationInterfaceEtudiant s = new ImplementationInterfaceEtudiant();
Naming.rebind("rmi://localhost/ServerDesAvis", s);
System.out.println("server is running");
System.out.println(".......");
System.out.println(".....");
System.out.println("...");
}
catch(RemoteException re){
re.printStackTrace();
}
catch(Exception e) {
System.out.println(e);
}
}
}
在 java ChefDepartement localhost 之后 我收到这个错误 java.rmi.NotBoundException: ImlementationInterfaceChefDept
您的 ImlementationInterfaceChefDept
RMI 服务器注册不正确。您将两者绑定到相同的 ServerDesAvis
端点:
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ServerDesAvis", c);
ImplementationInterfaceEtudiant s = new ImplementationInterfaceEtudiant();
Naming.rebind("rmi://localhost/ServerDesAvis", s);
... 这意味着第一个 (ImlementationInterfaceChefDept
) 将被第二个覆盖。您需要更换:
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ServerDesAvis", c);
...有了这个:
ImlementationInterfaceChefDept c = new ImlementationInterfaceChefDept();
Naming.rebind("rmi://localhost/ImlementationInterfaceChefDept", c);
希望对您有所帮助。