java.rmi.ConnectException:连接拒绝主机:127.0.1.1;

时间:2013-03-28 15:22:28

标签: java exception connection rmi remoteobject

    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设置为授予所有端口的所有连接,并且我在服务器或客户端中没有启用防火墙。

有什么建议可以吗?

13 个答案:

答案 0 :(得分:13)

问题已解决

我有完全相同的错误。当远程对象绑定到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。

答案 1 :(得分:6)

我在这个主题上发现了许多问答,并没有什么能帮助我 - 那是因为我的问题更基本(我能说什么我不是网络大师:))。我在/ 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地址,并在指定ip地址时使用该IP地址,例如,catalina.sh脚本:

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

答案 2 :(得分:5)

您可以使用LocalRegistry,例如:

  

public class UnlockSliderView extends FrameLayout { @BindView(R2.id.tv_unlock_slider) TextView tvUnlockSlider; @BindView(R2.id.iv_circle_slide) ImageView ivCircleSlide; private View parentCircle; private float xOrigin = 0; private float xOriginCircle = 0; private boolean circleTouched = false; public UnlockSliderView(Context context) { super(context); init(); } public UnlockSliderView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public UnlockSliderView(Context context, AttributeSet attr, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { inflate(getContext(), R.layout.layout_unlock_slider_view, this); ButterKnife.bind(this); parentCircle = (View) ivCircleSlide.getParent(); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { eventActionDown(event); } else if (event.getAction() == MotionEvent.ACTION_MOVE) { eventActionMove(event); } else if (event.getAction() == MotionEvent.ACTION_UP) { unlockFinish(); } return true; } private void eventActionDown(MotionEvent event) { if ((event.getX() >= ivCircleSlide.getX() && event.getX() <= ivCircleSlide.getX() + ivCircleSlide.getWidth()) && (event.getY() >= ivCircleSlide.getY() && event.getY() <= ivCircleSlide.getY() + ivCircleSlide.getHeight())) { xOrigin = event.getX(); xOriginCircle = ivCircleSlide.getX(); circleTouched = true; } else { circleTouched = false; } } private void eventActionMove(MotionEvent event) { if (circleTouched) { float newXCircle = xOriginCircle + (event.getX() - xOrigin); newXCircle = (newXCircle < xOriginCircle) ? xOriginCircle : newXCircle; newXCircle = (newXCircle > parentCircle.getWidth() - ivCircleSlide.getWidth() - xOriginCircle) ? parentCircle.getWidth() - ivCircleSlide.getWidth() - xOriginCircle : newXCircle; float alpha = 1 - ((newXCircle - xOriginCircle) / (parentCircle.getWidth() - ivCircleSlide.getWidth() - (xOriginCircle * 2))); tvUnlockSlider.setAlpha(alpha); ivCircleSlide.setX(newXCircle); if (newXCircle == parentCircle.getWidth() - ivCircleSlide.getWidth() - xOriginCircle) { unlockFinish(); if (mListener != null) mListener.onUnlock(); } } } private void unlockFinish() { if (circleTouched) { ivCircleSlide.animate().x(xOriginCircle).setDuration(400).start(); tvUnlockSlider.animate().alpha(1).setDuration(400).start(); circleTouched = false; } } and the xml is, <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="@dimen/unlock_slider_height" android:layout_margin="@dimen/default_padding" android:background="@drawable/btn_slider_back" android:gravity="center" android:orientation="vertical" android:padding="4dp"> <TextView android:id="@+id/tv_unlock_slider" style="@style/prelogin_slider" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="@dimen/unlock_slider_handle_size" android:layout_marginStart="@dimen/unlock_slider_handle_size" android:text="@string/logon_to_mobile_banking" /> <ImageView android:id="@+id/iv_circle_slide" android:layout_width="@dimen/unlock_slider_handle_size" android:layout_height="@dimen/unlock_slider_handle_size" android:scaleType="fitCenter" android:src="@drawable/btn_slider_handle" tools:ignore="ContentDescription" /> </FrameLayout>

答案 3 :(得分:3)

也许你的rmiregistry不会在客户端尝试连接到你的服务器之前创建它会导致这个异常。在Linux中,你可以使用“netstat”检查你的rmiregistry是否是你在java代码中分配的右端口上的绑定。 / p>

答案 4 :(得分:2)

如果您已尝试修改etc / hosts并添加java.rmi.server.hostname属性,但仍然将注册表绑定到127.0.0.1

在通过代码显式设置System属性后解决了我的问题,虽然没有从jvm args中选择相同的属性

答案 5 :(得分:1)

如果您在Linux环境中运行,请打开文件ALL 添加以下行

/etc/hostname

Wildcards

同时检查/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中写了以前完全为空的

现在一切正常

不知道它有多安全。你必须阅读更多关于document.querySelector("#actions .start").onclick = function() { myDropzone.enqueueFiles(myDropzone.getFilesWithStatus(Dropzone.ADDED)); }; document.querySelector("#actions .cancel").onclick = function() { myDropzone.removeAllFiles(true); }; 执行某些需要安全措施的可能选项的信息。

答案 6 :(得分:1)

我遇到了完全相同的问题,我的问题是我在如下的etc / hosts中配置了来自2个不同网络的2个IP地址。

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

这应该是因为在将其他IP用于其他设备通过网络到达rmiregistry方面存在冲突。

一旦我删除了不需要的多余记录,便能够解决问题。

所以我的etc / hosts文件只有以下记录。

10.xxx.x.xxx    localhost

答案 7 :(得分:0)

在摆脱&#34; :: 1&#34;之后,它对我有用。在/ etc / hosts中。

答案 8 :(得分:0)

在Windows上,请确保正确配置/禁用了Windows防火墙。我不得不禁用Windows防火墙(因为我没有去配置它),以便即使在使用本地主机进行测试时也能正常工作。

答案 9 :(得分:0)

就我而言,由于使用大学的PC,我无法编辑主机文件。

我通过以下方法解决了在另一个端口(而不是1099)中运行rmiregistry的问题:

rmiregistry <port>

然后在该端口上运行服务器。

这基本上是由占用端口引起的错误。

答案 10 :(得分:0)

当我在计算机上遇到相同的错误(“连接被拒绝”)时,原因是我在服务器端定义了以下内容:

 Naming.rebind("rmi://localhost:8080/AddService"
   ,addService); 

因此,服务器绑定了IP = 127.0.0.1和端口8080。

但是在客户端,我曾经使用过:

AddServerInterface st = (AddServerInterface)Naming.lookup("rmi://localhost"
                        +"/AddService");

因此我忘了在localhost之后添加端口号,因此我重写了上面的命令,并如下添加了端口号8080:

AddServerInterface st = (AddServerInterface)Naming.lookup("rmi://localhost:8080"
                        +"/AddService");

一切正常。

答案 11 :(得分:0)

您可以使用:

在服务器端:

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

在客户端:

Registry <object name you want> =LocateRegisty.getRegistry();

答案 12 :(得分:-1)

如果要使用 RMI 连接到远程服务器,则必须添加与以下内容相同的系统属性:

System.setProperty("java.rmi.server.hostname","Ip or DNS of the server");

或添加环境变量。

对我来说,我得到了连接被拒绝并通过在服务器端添加这行代码来解决它:

 java -jar -Djava.rmi.server.hostname="ip or dns of the server" packageName.jar

感谢其他人指导我解决它。

相关问题