Java RMI小程序客户端调用导致异常

Java RMI小程序客户端调用导致异常,java,exception,applet,client,rmi,Java,Exception,Applet,Client,Rmi,我在端口1099上进行了RMI注册,并成功地通过公共IP重新绑定。通过在服务器实现类的构造函数中调用super(1100)导出固定端口1100上的远程对象。但启动小程序客户端时,会出现以下异常: // java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.ConnectException: Connection refused to hos

我在端口1099上进行了RMI注册,并成功地通过公共IP重新绑定。通过在服务器实现类的构造函数中调用super(1100)导出固定端口1100上的远程对象。但启动小程序客户端时,会出现以下异常:

//   java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.ConnectException: Connection refused to host: public-ip; nested exception is: 
    java.net.ConnectException: Connection refused
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:353)
    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:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
    at $Proxy0.userRegister(Unknown Source)
    at rmi.source.Client.init(Client.java:117)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.rmi.ConnectException: Connection refused to host: RNI-SERVER-PUB-IP; 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 $Proxy5.join(Unknown Source)
    at rmi.source.ServerImpl.userRegister(ServerImpl.java:71)
    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:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    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:337)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    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)
    ... 22 more
//java.rmi.ServerException:服务器线程中发生RemoteException;嵌套异常是:
java.rmi.ConnectException:拒绝连接到主机:公共ip;嵌套异常是:
java.net.ConnectException:连接被拒绝
在sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:353)
在sun.rmi.transport.transport$1.run(transport.java:177)
在sun.rmi.transport.transport$1.run(transport.java:174)
位于java.security.AccessController.doPrivileged(本机方法)
位于sun.rmi.transport.transport.serviceCall(transport.java:173)
位于sun.rmi.transport.tcp.tcpttransport.handleMessages(tcpttransport.java:553)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run0(tcpttransport.java:808)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run(tcpttransport.java:667)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
运行(Thread.java:722)
位于sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(未知源)
位于sun.rmi.transport.StreamRemoteCall.executeCall(未知源)
位于sun.rmi.server.UnicastRef.invoke(未知源)
位于java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(未知源)
位于java.rmi.server.RemoteObjectInvocationHandler.invoke(未知源)
位于$Proxy0.userRegister(未知源)
位于rmi.source.Client.init(Client.java:117)
位于com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(未知源)
位于sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(未知源)
位于java.lang.Thread.run(未知源)
原因:java.rmi.ConnectException:拒绝连接主机:RNI-SERVER-PUB-IP;嵌套异常是:
java.net.ConnectException:连接被拒绝
位于sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
位于sun.rmi.transport.tcp.tcpcchannel.createConnection(tcpcchannel.java:216)
位于sun.rmi.transport.tcp.tcpcchannel.newConnection(tcpcchannel.java:202)
位于sun.rmi.server.UnicastRef.invoke(UnicastRef.java:128)
位于java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
位于java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
在$Proxy5.join处(未知源)
位于rmi.source.ServerImpl.userRegister(ServerImpl.java:71)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
在sun.rmi.transport.transport$1.run(transport.java:177)
在sun.rmi.transport.transport$1.run(transport.java:174)
位于java.security.AccessController.doPrivileged(本机方法)
位于sun.rmi.transport.transport.serviceCall(transport.java:173)
位于sun.rmi.transport.tcp.tcpttransport.handleMessages(tcpttransport.java:553)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run0(tcpttransport.java:808)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run(tcpttransport.java:667)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
运行(Thread.java:722)
原因:java.net.ConnectException:连接被拒绝
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
位于java.net.socksocketimpl.connect(socksocketimpl.java:391)
位于java.net.Socket.connect(Socket.java:579)
位于java.net.Socket.connect(Socket.java:528)
位于java.net.Socket。(Socket.java:425)
位于java.net.Socket(Socket.java:208)
位于sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
位于sun.rmi.transport.proxy.rmismastersocketfactory.createSocket(rmismastersocketfactory.java:146)
位于sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 还有22个

不知道该怎么办。有什么想法吗?

这是您希望看到的IP地址吗?您可以从该客户端ping该地址吗?@EJP是的。我可以从客户端pc上telnet服务器公共ip:1099和公共ip:1100。我看到我的rmi应用程序部分工作。加载客户端小程序时,我正在rmi服务器上填充一个数组。我从客户端pc上调试了数组的大小。该数字正确,因为打开了几个客户端窗口。我认为当客户端小程序尝试调用方法失败。客户端小程序中的主机名系统属性应该是什么?我也将其设置为windows客户端公共ip,并尝试了,但没有成功。此外,我在windows客户端NAT中转发了端口1099和1100。在服务器上设置了java.rmi.server.hostname属性。