当前位置: 首页 > 面试题库 >

正在使用的远程方法调用端口

庄高谊
2023-03-14
问题内容

我已经使用RMI创建了Server,Client之类的程序。但是,每当从命令提示符启动rmiregistry后运行服务器时,都会抛出已在使用中的错误。是我唯一开始rmiregistry的人。我已经从netstat检查了它。

服务器代码:

public class Server implements Runnable, Linker{


private static Server server = null;
    private static Linker l = null;
    private String name = null;
    public Server(){}

    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;               
    }  
    public void run(){
        while(!("Andy").equalsIgnoreCase(name)){

        }
    }
    public static void createStub(){
        try{
            server = new Server();
            l = (Linker) UnicastRemoteObject.exportObject(server, 1099);

            Registry registry = LocateRegistry.getRegistry();
            registry.bind("Link", l);
            System.out.println("Ready");
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }                       
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        createStub();
        Thread t = new Thread(server);

    }
}

客户代码:

public class Client implements Runnable{


private Scanner sc = new Scanner(System.in);
    private Linker linker = null;

    public void loadStub(){
        try{
            Registry registry = LocateRegistry.getRegistry(1099);
            linker = (Linker) registry.lookup("Link");

        }catch(Exception e){

        }
    }
    public void run(){
        String ip = null;
        while(sc.hasNext()&&!(ip = sc.nextLine()).equalsIgnoreCase(":q")){
            try {
                linker.setName(ip);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


    public static void main(String...args){
        Client client = new Client();
        client.loadStub();
        Thread t = new Thread(client);
        t.start();
    }
}

例外:

java.rmi.server.ExportException: Port already in use: 1099; nested exception is: 
java.net.BindException: Address already in use: JVM_Bind

问题答案:

rmiregistry在其过程中使用的端口1099,所以你不能在你使用它。要么:

  1. 通过LocateRegistry.createRegistry()(首选)以相同的过程启动注册表。
  2. 将对象导出到其他端口。
  3. rmiregistry在1099以外的其他端口上启动。


 类似资料:
  • 问题内容: 我已经编写了一些JavaScript,以便在asp.net应用程序中执行ajax调用。这会触发一个方法,该方法调用URL,并在POST中发送一些参数。 接收页面处理数据并更新我们的数据库。 我们将向客户提供此代码,以使他们能够在我们的结帐流程中为每笔交易向我们发送所需的数据。 谁能告诉我是否有办法防止对该URL的未经授权的访问?否则,不道德的开发人员可能会使用该URL将数据添加到我们的

  • 问题 你想在一个消息传输层如 sockets 、multiprocessing connections 或 ZeroMQ 的基础之上实现一个简单的远程过程调用(RPC)。 解决方案 将函数请求、参数和返回值使用pickle编码后,在不同的解释器直接传送pickle字节字符串,可以很容易的实现RPC。 下面是一个简单的PRC处理器,可以被整合到一个服务器中去: # rpcserver.py imp

  • 使用远程调试 为了与qemu配合进行源代码级别的调试,需要先让qemu进入等待gdb调试器的接入并且还不能让qemu中的CPU执行,因此启动qemu的时候,我们需要使用参数-S –s这两个参数来做到这一点。在使用了前面提到的参数启动qemu之后,qemu中的CPU并不会马上开始执行,这时我们启动gdb,然后在gdb命令行界面下,使用下面的命令连接到qemu: (gdb) target remot

  • 我有一个开关语句,它将与一组进行比较,其中每个匹配调用不同的方法。 然而,对我来说,这听起来像是可以通过使用链接到包含方法和参数数量的操作的哈希映射(HashMap)更优雅、更有效地实现的,这样我可以将每个方法都链接到哈希映射(HashMap),例如: 因此,Operation类将有N个不同的实例,每个实例都包含字符串、方法和参数数量 然后,我可以简单地使用类似的方法调用该方法(我知道这不是使用i

  • 因此,客户机请求CPU和内存(我相信我需要两个队列),服务器用这些值进行响应。 是否可以简单地创建和,本例使用Python中的Pika库。

  • 通过 Invoke 方法同步调用 Invoke(string, []reflect.Value, *InvokeSettings) ([]reflect.Value, error) Invoke 方法有三个输入参数,两个输出参数。 第一个输入参数是远程方法名。 第二个输入参数是远程方法参数。 第三个输入参数是远程调用设置。 第一个输出参数表示返回的结果。 第二个输出参数表示返回的错误。 因为使用该