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は、すべてのポートへのすべての接続を許可するように設定されており、サーバーまたはクライアントでファイアウォールが有効になっていません。
何か提案はありますか?
これは RMI FAQのアイテムA.1 です。/etc/hostsファイルを修正するか、サーバーでJava.rmi.server.hostname
プロパティを設定する必要があります。
問題が解決しました
私はまったく同じエラーがありました。リモートオブジェクトが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です。
次のようなLocalRegistryを使用できます。
Registry rgsty = LocateRegistry.createRegistry(1888); rgsty.rebind("hello", hello);
私はこのトピックに関する多くの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
クライアントがサーバーに接続しようとする前にrmiregistryが作成されず、この例外が発生する可能性があります。Linuxでは、「[net]」を使用して、Javaコード。
Etc/hostsを変更してJava.rmi.server.hostnameプロパティも追加しようとしたが、レジストリが127.0.0.1にバインドされている場合
jvm argsから同じプロパティが選択されなかったにもかかわらず、コードを介してシステムプロパティを明示的に設定した後、私にとっての問題は解決しました。
私はまったく同じ問題を抱えていて、私の問題は、以下のようにetc/hostsで設定された2つの異なるネットワークからの2つのIPアドレスを持つことでした。
10.xxx.x.xxx localhost
192.xxx.x.xxx localhost
これは、他のデバイスがネットワーク経由でrmiregistryに到達するために使用するIPに関して競合があったためです。
不要な余分なレコードを削除すると、問題を解決できました。
したがって、私のetc/hostsファイルには次のレコードしかありませんでした。
10.xxx.x.xxx localhost
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.allow
のALL
にも書き込みました
それがどれほど安全かわからない。ちょっとしたセキュリティを必要とする何かを行うには、/etc/hosts.allow
の可能なオプションについてもっと読む必要があります。
/ etc/hostsの「:: 1」を削除した後、私にとってはうまくいきます。
Windowsでは、Windowsファイアウォールが正しく構成/無効化されていることを確認してください。 localhostでテストしているときでも機能するようにするには、Windowsファイアウォールを無効にしなければなりませんでした(設定に煩わされなかったため)。
私の場合、大学のPCを使用しているため、hostsファイルを編集できませんでした。
私は、(1099の代わりに)別のポートでrmiregistryを実行する問題を修正しました。
rmiregistry <port>
そして、そのポートでサーバーを実行します。
これは基本的に、占有ポートが原因のエラーでした。