当前位置: 首页 > 知识库问答 >
问题:

Java RMI 中的未知主机

乜钱明
2023-03-14

我在一个Java RMI分布式系统上工作,我有两个虚拟机在我的本地机器上运行ubuntu(ubuntu-(主)IP=192.168.101.131和ubuntu-(从)IP=92.168.01.137)。我可以运行我的银行服务器吗。两个虚拟机上的jar(在tomcat中)。ubuntu-(主)数据库自动复制到ubuntu-(从)上。到现在为止,一直都还不错。服务器提到(葡萄牙语)在默认端口1099中运行。

Cubuntu@ubuntu:/var/www/html/classes$ java -cp ./code/:jar/serverBanco.jar -
Dja.rmi.server.codebase=file:jar/computeInterfaces.jar -
Djava.rmi.server.hostname=192.168.101.131 -
Djava.security.policy=file:jar/all.policy bank.BankServer
Default RMI Port = 1099
Servidor iniciado...

现在,当在我的本地机器上运行客户端时,我的程序首先ping主机以查看他是否在线,如果确定,则将注册表绑定到它,如下所示:

InetAddress inet = null;
     InetAddress inet2 = null;
     String rmi_adress;
        //ping 
        inet = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, 101, (byte) 137 });
        System.out.println("Enviando Ping Request para host: " + inet);
        System.out.println(inet.isReachable(5000) ? "Resposta: Host online" : "Resposta: Host offline");

        inet2 = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, 101, (byte) 131 });
        System.out.println("Enviando Ping Request para host: " + inet2);
        System.out.println(inet2.isReachable(5000) ? "Resposta: Host online" : "Resposta: Host offline");

        try {
            registry = LocateRegistry.getRegistry("rmi://127.0.0.1/BankServer");
            if (inet.isReachable(5000)) {
                rmi_adress = "rmi://192.168.101.137/BankServer";
                registry = LocateRegistry.getRegistry(rmi_adress);      
                System.out.println("RMI Port set to " + rmi_adress);
                bank = (OperationsInterface) registry.lookup(rmi_adress);
            }else {
                rmi_adress =  "rmi://192.168.101.131/BankServer";
                registry = LocateRegistry.getRegistry(rmi_adress);      
                System.out.println("RMI Port set to " + rmi_adress);
                bank = (OperationsInterface) registry.lookup(rmi_adress);
            }

但是当运行客户端时,它不能识别主机。这是我得到的例外:

Enviando Ping Request para host: /192.168.101.137
Resposta: Host online
Enviando Ping Request para host: /192.168.101.131
Resposta: Host online
RMI Port set to rmi://192.168.101.137/BankServer
Exception in thread "main" java.rmi.UnknownHostException: Unknown host: 
rmi://192.168.101.137/BankServer; nested exception is: 
    Java.net.UnknownHostException: rmi://192.168.101.137/BankServer
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:616)
    at 
sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at atm.ATM.main(ATM.java:52)
Caused by: java.net.UnknownHostException: rmi://192.168.101.137/BankServer
    at 
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at... 

现在这里会发生什么?感谢任何帮助。

共有2个答案

马宜民
2023-03-14

LocateRegistry.getRegistry()的参数是主机名,而不是RMI URL。请参阅Javadoc。

柯立果
2023-03-14

您应该尝试在获取注册表时删除 rmi://

 类似资料:
  • 我在JMeter上运行测试脚本时遇到过这种错误? java.net.unknownHostException:h2ebiz-testat java.net.inet6addressimpl.lookupAllHostAddr(本机方法)位于java.net.inetAddress.2.lookupAllHostAddr(未知源)位于java.net.inetAddress.getAddress.g

  • 问题内容: 我正在尝试通过android应用程序中的HTTP Post请求访问textalertapp.com。但是我收到了未知主机错误。谁能帮我解决这个问题。 代码是 问题答案: 我只是在清单文件中添加了这一行。问题解决了

  • 我有使用JSCH通过sftp传输文件的代码。这段代码可以在我们的一个测试环境中工作,但不能在另一个环境中工作。它不工作的环境启用了FIPS模式,但我不确定这是否导致了问题。在这两种环境中,我都可以使用代码使用的私钥从命令行进行sftp。 JSch和ssh有一些相关的输出,但我不确定在这一点上还能做些什么。SSH密钥和已知主机文件似乎都已正确设置。

  • 我的机器运行的是hbase-0.94.16服务器,因此当我尝试使用hbase definitive primitive guide中的文档来安装hbase hush服务器时,它出现了以下异常 14/05/22 11:03:43信息zookeeper.zookeeper:客户端环境:java.io.tmpdir=/tmp 14/05/22 11:03:43信息zookeeper.zookeeper:

  • 您好,我正在尝试获取rss源,代码如下: 它由和AsyncTask包装,我得到了这个日志: 有人知道吗?我也试过google news rss feed(https://news.google.com/news/rss/headlines/section/topic/WORLD?ned=us 方法parseFeed():

  • 我们在应用程序中使用docker compose,但不熟悉应用程序的这一部分。在运行<code>docker Cosme up--build<code>后,我们遇到了此错误: