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.