我在Java rmi multiclient代码中有问题

我正在编写Java rmi multi_client代码,其中第一个客户端(client1)有权修改或创建对象,而成功的客户端(client2)可以访问由client1创建的对象,返回onject以查看它,但是它不起作用 第一类客户

 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);

            }
            }

}

成功的客户端类

 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();
        }

    }



}

服务器类

    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 ChefDeDepartement本地主机之后 我得到这个错误 java.rmi.NotBoundException:ImlementationInterfaceChefDept

haoaiwang114 回答:我在Java rmi multiclient代码中有问题

您的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);

希望这会有所帮助。

本文链接:https://www.f2er.com/2816184.html

大家都在问