public abstract class RMISocketFactory extends Object implements RMIClientSocketFactory, RMIServerSocketFactory
RMISocketFactory
实例通过RMI运行时用来获得RMI客户端和服务器套接字调用。应用程序可以使用
setSocketFactory
方法来请求,RMI运行时使用的套接字工厂实例而不是默认的实现。
默认套接字工厂实现执行一三层次的方法来创建客户端套接字。首先,尝试了一个直接的套接字连接到远程虚拟机。如果失败(由于防火墙),运行库使用HTTP与服务器的显式的端口号。如果防火墙不允许这种类型的通信,那么HTTP服务器上的CGI脚本用于后期的RMI调用。HTTP隧道机制默认是关闭的。这种行为是由java.rmi.server.disableHttp
属性控制,其默认值为true
。设置此属性的值false
将启用HTTP隧道机制。
反对:HTTP隧道。 HTTP隧道机制所述,具体明确的端口和HTTP HTTP到cgi-bin脚本,不推荐使用。这些HTTP隧道机制是在未来发布的平台拆除。
默认的套接字工厂实施创建绑定到通配符地址服务器套接字,它接受来自所有网络接口要求。
你可以使用RMISocketFactory
类创建服务器套接字绑定到一个特定的地址,限制请求的起源。例如,下面的代码实现了一个套接字工厂将服务器套接字IPv4回送地址。这就限制了RMI处理请求只能从本地主机。
class LoopbackSocketFactory extends RMISocketFactory {
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port, 5, InetAddress.getByName("127.0.0.1"));
}
public Socket createSocket(String host, int port) throws IOException {
// just call the default client socket factory
return RMISocketFactory.getDefaultSocketFactory()
.createSocket(host, port);
}
}
// ...
RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
到
127.0.0.1
确保生成的存根连接到正确的网络接口设置
java.rmi.server.hostname
系统性能。
Constructor and Description |
---|
RMISocketFactory()
构建了一个
RMISocketFactory 。
|
Modifier and Type | Method and Description |
---|---|
abstract ServerSocket |
createServerSocket(int port)
在指定的端口上创建一个服务器套接字(端口0表示一个匿名端口)。
|
abstract Socket |
createSocket(String host, int port)
创建一个连接到指定主机和端口的客户端套接字。
|
static RMISocketFactory |
getDefaultSocketFactory()
返回一个引用,通过RMI实现使用了默认的套接字工厂。
|
static RMIFailureHandler |
getFailureHandler()
返回套接字创建失败的
setFailureHandler 方法处理程序。
|
static RMISocketFactory |
getSocketFactory()
返回由
setSocketFactory 方法插座厂。
|
static void |
setFailureHandler(RMIFailureHandler fh)
设置要由RMI运行时如果服务器套接字创建失败的故障处理。
|
static void |
setSocketFactory(RMISocketFactory fac)
设置全局套接字工厂从RMI获取套接字(如果远程对象不是一个特定的客户端或服务器套接字工厂相关)。
|
public RMISocketFactory()
RMISocketFactory
。
public abstract Socket createSocket(String host, int port) throws IOException
createSocket
接口
RMIClientSocketFactory
host
-主机名
port
-端口号
IOException
-如果在创建套接字时发生I/O错误
public abstract ServerSocket createServerSocket(int port) throws IOException
createServerSocket
接口
RMIServerSocketFactory
port
-端口号
IOException
-如果服务器创建套接字时发生I/O错误
public static void setSocketFactory(RMISocketFactory fac) throws IOException
fac
-插座厂
IOException
-如果RMI套接字工厂已经设置
SecurityException
-如果存在一个安全管理及其
checkSetFactory
方法不允许操作。
getSocketFactory()
,
SecurityManager.checkSetFactory()
public static RMISocketFactory getSocketFactory()
setSocketFactory
方法插座厂。返回
null
如果没有插座厂已定。
setSocketFactory(RMISocketFactory)
public static RMISocketFactory getDefaultSocketFactory()
getSocketFactory
返回
null
。
public static void setFailureHandler(RMIFailureHandler fh)
如果存在安全管理器,该方法首先调用安全管理器的checkSetFactory
方法确保操作是允许的。这可能会导致一个SecurityException
。
fh
-故障处理
SecurityException
-如果存在一个安全管理及其
checkSetFactory
方法不允许操作。
getFailureHandler()
,
RMIFailureHandler.failure(Exception)
public static RMIFailureHandler getFailureHandler()
setFailureHandler
方法处理程序。
setFailureHandler(RMIFailureHandler)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.