JAVA 对于RMI连接超时的限制

首先我要diss一下百度搜索这个出来的第一篇文章,写了一大堆废话然而一点作用都没…还是谷歌靠谱…(怪我有时候实在懒得看英文…)

这里放上Stackoverflow上亲测有用的代码,在使用RMI前设置一下,全局有效。

RMISocketFactory.setSocketFactory( new RMISocketFactory()
            {
                public Socket createSocket( String host, int port )
                    throws IOException
                {
                    Socket socket = new Socket();
                    socket.setSoTimeout( timeoutMillis );
                    socket.setSoLinger( false, 0 );
                    socket.connect( new InetSocketAddress( host, port ), timeoutMillis );
                    return socket;
                }

                public ServerSocket createServerSocket( int port )
                    throws IOException
                {
                    return new ServerSocket( port );
                }
            }

当然稳妥起见也可以配合以下代码使用:

System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(TIMEOUTMILLS));
System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(TIMEOUTMILLS));
System.setProperty("sun.rmi.transport.tcp.responseTimeout", String.valueOf(TIMEOUTMILLS));
System.setProperty("sun.rmi.transport.tcp.readTimeout", String.valueOf(TIMEOUTMILLS));
System.setProperty("sun.rmi.transport.connectionTimeout", String.valueOf(TIMEOUTMILLS));
System.setProperty("sun.rmi.transport.proxy.connectTimeout", String.valueOf(TIMEOUTMILLS));
System.setProperty("sun.rmi.transport.tcp.handshakeTimeout", String.valueOf(TIMEOUTMILLS));

你可能感兴趣的:(Java)