53
    java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    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.invoke(UnicastRef.java:128)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
    at com.sun.proxy.$Proxy0.notifyMe(Unknown Source)
    at CallbackServerImpl.doCallback(CallbackServerImpl.java:149)
    at CallbackServerImpl.registerForCallback(CallbackServerImpl.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
    Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    ... 23 more

リモート クライアントをサーバーに接続しようとすると、この例外が発生します。サーバーとクライアントの両方で、rmi の registryUrl のホスト名はサーバーのパブリック IP アドレスです。また、localhost をサーバーに入れようとしましたが、エラーは変わりません。

私の java.policy は、すべての接続をすべてのポートに許可するように設定されており、サーバーまたはクライアントでファイアウォールが有効になっていません。

何か提案はありますか?

4

14 に答える 14

46

これはRMI FAQ の項目 A.1です。/etc/hosts ファイルを修正するかjava.rmi.server.hostname、サーバーでプロパティを設定する必要があります。

于 2013-03-29T01:33:27.290 に答える
3

Linux 環境で実行している場合は、ファイルを開き、/etc/hosts.allow 次の行を追加します。

ALL

ワイルドカード

ともチェックして/etc/hostname/etc/hostそこに何か問題があるかどうかを確認します。

/ etc / hostから変更する必要がありました

127.0.0.1 localhost
127.0.1.1 AMK

127.0.0.1 localhost
127.0.0.1 AMK

以前は完全に空だっALLたファイルにも書き込みました/etc/hosts.allow

今、すべてが動作します

それがどれほど安全かはわかりません。ちょっとしたセキュリティが必要なことを行うには、可能なオプションについてもっと読む/etc/hosts.allow必要があります。

于 2016-09-06T21:51:38.490 に答える
2

etc/hosts を変更して java.rmi.server.hostname プロパティを追加しようとしても、レジストリが 127.0.0.1 にバインドされている場合

同じプロパティがjvm argsから選択されていませんが、コードを介してシステムプロパティを明示的に設定した後、私の問題は解決されました

于 2013-06-04T13:38:48.013 に答える
1

私はまったく同じ問題を抱えていましたが、私の問題は、以下のように etc/hosts で構成された 2 つの異なるネットワークから 2 つの IP アドレスを持っていたことです。

10.xxx.x.xxx    localhost
192.xxx.x.xxx   localhost

これは、他のデバイスがネットワーク経由で rmiregistry に到達するために使用する IP に関して競合があったためです。

不要な余分なレコードを削除したら、問題を解決できました。

したがって、私の etc/hosts ファイルには次のレコードしかありませんでした。

10.xxx.x.xxx    localhost
于 2019-01-10T06:43:01.557 に答える
-1

以下を簡単に使用できます。

サーバー側:

Registry <objectName1> = LocateRegistry.createRegistry(1099);
Registry <objectName2> = LocateRegistry.getRegistry();

クライアント側:

Registry <object name you want> = LocateRegistry.getRegistry();
于 2020-01-14T06:57:49.610 に答える