我有一个简单的客户端和服务器通过RMI进行通信的应用程序。
当我杀死服务器时,我正在四处看看客户端的行为。
客户端无法创建新套接字。你可以看到下面的例外:
Caused by: java.rmi.ConnectException: Connection refused to host: 172.17.2.100; nested exception is:
java.net.ConnectException: Connection timed out
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.newCall(UnicastRef.java:342)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
... 18 more.
Caused by: java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
... 30 more.
起初我认为这与创建注册表时传递的RMIClientSocketFactory创建的套接字有关,但正如您可以从异常中看到的那样,当TCPEndpoint尝试创建新套接字时。
由于TCPEndpoint显式创建了一个不使用超时的新套接字,我真的不知道如何克服这个问题。
有什么想法吗?