web-dev-qa-db-ja.com

java.rmi.ConnectException:ホストへの接続が拒否されました:127.0.1.1;

    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のhostNameはサーバーのパブリックIPアドレスです。また、localhostをサーバーに配置しようとしましたが、エラーは変わりません。

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

何か提案はありますか?

40
antonbalboa

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

30
user207421

問題が解決しました

私はまったく同じエラーがありました。リモートオブジェクトがrmiregistryにバインドされると、リモートアドレスからメソッドを呼び出そうとすると明らかに失敗するループバックIPアドレスが付加されました。これを修正するには、Java.rmi.server.hostnameプロパティを、他のデバイスがネットワーク経由でrmiregistryに到達できるIPアドレスに設定する必要があります。 JVMを介してパラメーターを設定しようとすると、機能しません。 それは私のために働いたオブジェクトをrmiregistryにバインドする直前に私のコードに次の行を追加するだけで:

System.setProperty("Java.rmi.server.hostname","192.168.1.2");

この場合、RMIレジストリ上のリモートオブジェクトをバインドしているPCのローカルネットワーク上のIPアドレスは192.168.1.2です。

13

次のようなLocalRegistryを使用できます。

Registry rgsty = LocateRegistry.createRegistry(1888); rgsty.rebind("hello", hello);

7
Jianxing Fan

私はこのトピックに関する多くのQ&Aを見つけましたが、何も私を助けてくれませんでした-それは私の問題がより基本的だったからです(私はネットワーキングの第一人者ではないということができます:))。/etc/hostsのIPアドレスが間違っていました。私が試したものには、CATALINA_OPTSの次のものが含まれていました。

CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true -Xmx128M -server 
-Dcom.Sun.management.jmxremote 
-Dcom.Sun.management.jmxremote.port=7091 
-Dcom.Sun.management.jmxremote.authenticate=false 
-Dcom.Sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=A.B.C.D"  #howeverI put the wrong ip here!

export CATALINA_OPTS

私の問題は、何ヶ月も前にIPアドレスを変更したが、/ etc/hostsファイルを更新したことがないことでした。ローカルプロセスを表示していても、デフォルトでjconsoleは何らかの方法でホスト名-i ipアドレスを使用しているようです。最善の解決策は、単に/ etc/hostsファイルを変更することでした。

動作する他の解決策は、/ sbin/ifconfigから正しいIPアドレスを取得し、catalina.shスクリプトなどでIPアドレスを指定するときにそのIPアドレスを使用することです。

-Djava.rmi.server.hostname=A.B.C.D
6
Paul

クライアントがサーバーに接続しようとする前にrmiregistryが作成されず、この例外が発生する可能性があります。Linuxでは、「[net]」を使用して、Javaコード。

3
CJeremy

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

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

2
SVashisth

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

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

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

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

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

10.xxx.x.xxx    localhost
1
Dinu94

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

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

今ではすべてが機能します

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

1
Ar maj

/ etc/hostsの「:: 1」を削除した後、私にとってはうまくいきます。

0
Joshua

Windowsでは、Windowsファイアウォールが正しく構成/無効化されていることを確認してください。 localhostでテストしているときでも機能するようにするには、Windowsファイアウォールを無効にしなければなりませんでした(設定に煩わされなかったため)。

0
Dula

私の場合、大学のPCを使用しているため、hostsファイルを編集できませんでした。

私は、(1099の代わりに)別のポートでrmiregistryを実行する問題を修正しました。

rmiregistry <port>

そして、そのポートでサーバーを実行します。

これは基本的に、占有ポートが原因のエラーでした。

0