客户端查找服务器时获取 NotBoundException

问题描述

我正在尝试在 oracles 的网站上运行 rmi 教程。我能够运行服务器,但在运行客户端时收到错误消息。尝试运行客户端时收到的错误是 NotBoundException 异常。如何修复此错误

下面是代码和异常

异常

Exception in thread "main" java.rmi.NotBoundException: Server
    at java.rmi/sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:234)
    at java.rmi/sun.rmi.registry.RegistryImpl_Skel.dispatch(RegistryImpl_Skel.java:133)
    at java.rmi/sun.rmi.server.UnicastServerRef.olddispatch(UnicastServerRef.java:468)
    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:298)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
    at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at java.base/java.lang.Thread.run(Thread.java:832)
    at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303)
    at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279)
    at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:380)
    at java.rmi/sun.rmi.registry.RegistryImpl_Stub.lookup(RegistryImpl_Stub.java:123)
    at rmi.Client.main(Client.java:13)

我在端口 1212 使用不同项目的服务器和客户端

这里是服务器

package De_1;

import java.rmi.AlreadyBoundException;
import java.rmi.remoteexception;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server {
    public static void main(String[] args) throws remoteexception,AlreadyBoundException {
        Registry r = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
        ProductDAO productDAO = new ProductDAOImpl();
        r.bind("Server",productDAO);
    }
}

这里是客户

package rmi;

import java.rmi.NotBoundException;
import java.rmi.remoteexception;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Client {
    public static void main(String[] args) throws remoteexception,NotBoundException {
        Registry r = LocateRegistry.getRegistry(1212);
        ProductDAO productDAO = (ProductDAO) r.lookup("Server");

        System.out.println("Hay nhap");
        Scanner sc = new Scanner(system.in);
        while (true) {
            String command = sc.nextLine();
            StringTokenizer stringTokenizer = new StringTokenizer(command);
            String request = stringTokenizer.nextToken();
            System.out.println(request);
            switch (request) {
                case "HELLO": {
                    productDAO.addProduct();
                }
                default:
                    break;
            }
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)