簡體   English   中英

RMI連接在本地主機上被拒絕

[英]RMI connection refused on localhost

我正在嘗試學習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

我認為,實現代碼無關緊要,因為它只是運行代碼的已實現接口。

這既沒有意義,也沒有意義。 接口不會“運行代碼”。 類中的方法運行代碼,在這種情況下,實現類運行代碼。 但是,您的問題不在於“運行代碼”,而在於連接注冊表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM