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

RMI连接在本地主机上被拒绝

李嘉胜
2023-03-14
问题内容

我正在尝试学习RMI编码,当我运行RMI的服务器端时,连接被拒绝。这是我服务器的主要方法

public static void main(String[] args)throws Exception {
Implementation impl=new Implementation();
Naming.rebind("//localhost:2020/RMI", impl);
System.out.println("Implementation has been bind to the name RMI and is ready for use");
    }

我相信实现代码无关紧要,因为它只是运行代码的已实现接口。我得到的例外是这个

Exception in thread "main" java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
    java.net.ConnectException: Connection refused: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
    at sun.rmi.server.UnicastRef.newCall(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at java.rmi.Naming.rebind(Unknown Source)
    at epl362Project.Server.main(Server.java:10)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
    ... 7 more

我究竟做错了什么?客户端和服务器端都将在我的笔记本电脑上运行,因为这只是一个练习。我是否缺少代码或代码有问题?除了给我答案外,请解释为什么会这样,因为我不仅想让它起作用,而是在尝试学习。

**编辑我发现了为什么我的代码无法正常工作。我缺少一行代码,说

LocateRegistry.createRegistry(2020);

这是我在关于stackoverflow的其他问题中发现的。但是没有任何解释,也没有找到关于为什么RMI正常工作需要此代码的在线解释。有人解释吗?


问题答案:

目标Naming.rebind()是RMI注册中心。它必须正在运行。它没有运行。因此,您无法连接到它。所以你得到了ConnectException

我相信实现代码无关紧要,因为它只是运行代码的已实现接口。

这既没有意义又无关紧要。接口不会“运行代码”。类中的方法运行代码,在这种情况下,实现类运行代码。但是,您的问题不在于“运行代码”,而在于连接注册表。



 类似资料:
  • 问题内容: 我在使用Java rmi时遇到问题: 当我尝试运行服务器时,出现了connectException(请参见下文)。 执行rebind方法时发生异常: 当改用rmi:// localhost:2020 / RemoteDataPointHandler时,它也不起作用。另外,使用默认端口不起作用。我也尝试使用127.0.0.1 ip地址,但效果相同。 我的运行时参数: 问题答案: 当我更换

  • 我已经设置了Flurl在我的Xamarin PCL中运行,并且我正在调用我在MVC应用程序中运行的Web Api。 似乎 Flurl 可以毫无问题地击中我部署的 API,但由于某种原因我无法在本地测试更改。 我现在做的是: 我也尝试过一个简单的GetAsync(),但再次失败。 任何帮助都将不胜感激。 编辑: 为了了解更多信息,该项目是Ionic移动应用程序的重新开发。我已经在本地运行了ionic

  • 我试图在PHP中对本地主机执行一个cURL请求,但出现以下错误: CURL错误(7):连接到8000localhost端口失败:连接被拒绝 我试图用谷歌搜索这条信息,也在StackOverflow上找到了类似的问题,但似乎没有任何效果。 卷曲php: test.php: 如果删除“CURLOPT_IPRESOLVE”值,请求将永远不会解析。我还尝试将“CURLOPT_SSL_VERIFYPEER”

  • 这让我很困惑。 我有一个运行nginx-php-fpm的本地开发设置,我在其中使用.localhost作为每个项目的工作域。昨天Chrome停止了与本地域的合作。相反,它只是返回被拒绝的连接。DevTools将错误显示为net::ERR\u CONNECTION\u RESET。 访问http://127.0.0.1工作,但当然不适用于本地项目。 Safari继续与.localhost一起工作。

  • 问题内容: 我已经为RMI的客户端编写了以下代码。但是得到 代码: 问题答案: 如果要在绑定,重新绑定或查找时获取该注册表,则注册表不会运行。如果让它进行远程调用,请参阅Javadoc随附的RMI FAQ 中的项目A.1 ,如果您正在运行Linux,还请检查/ etc / hosts文件是否将127.0.0.1映射到localhost和您的真实IP地址。到您的真实主机名- 在某些Linux发行版中

  • 我刚刚在我的个人计算机上安装了DBeaver,并试图创建一个PostgreSQL数据库。 我在连接到数据库窗口中输入了以下内容: 主机:本地主机 端口:5432 数据库:Postgres 用户:Postgres 这些值都是预先填充的默认值,所以我离开了它们,点击了测试连接...按钮。 当我单击测试按钮时,一个错误窗口打开,说:“到本地主机的连接:5432被拒绝。请检查主机名和端口是否正确,以及邮局