- java.lang.Object
-
- java.rmi.server.RMISocketFactory
-
- All Implemented Interfaces:
-
RMIClientSocketFactory,RMIServerSocketFactory
public abstract class RMISocketFactory extends Object implements RMIClientSocketFactory, RMIServerSocketFactory
RMI运行时使用一个RMISocketFactory实例,以获取RMI调用的客户端和服务器套接字。 应用程序可以使用setSocketFactory方法请求RMI运行时使用其套接字工厂实例而不是默认实现。默认的套接字工厂实现创建到远程主机的直接套接字连接。
默认套接字工厂实现创建绑定到通配符地址的服务器套接字,该通配符地址接受来自所有网络接口的请求。
- Implementation Note:
-
您可以使用
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());java.rmi.server.hostname系统属性设置为127.0.0.1以确保生成的存根连接到正确的网络接口。 - 从以下版本开始:
- 1.1
-
-
构造方法摘要
构造方法 Constructor 描述 RMISocketFactory()构造一个RMISocketFactory。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 abstract ServerSocketcreateServerSocket(int port)在指定端口上创建服务器套接字(端口0表示匿名端口)。abstract SocketcreateSocket(String host, int port)创建连接到指定主机和端口的客户端套接字。static RMISocketFactorygetDefaultSocketFactory()返回对此RMI实现使用的默认套接字工厂的引用。static RMIFailureHandlergetFailureHandler()返回由setFailureHandler方法设置的套接字创建失败的处理程序。static RMISocketFactorygetSocketFactory()返回由setSocketFactory方法设置的套接字工厂。static voidsetFailureHandler(RMIFailureHandler fh)如果服务器套接字创建失败,则设置由RMI运行时调用的故障处理程序。static voidsetSocketFactory(RMISocketFactory fac)设置RMI获取套接字的全局套接字工厂(如果远程对象与特定客户端和/或服务器套接字工厂没有关联)。
-
-
-
方法详细信息
-
createSocket
public abstract Socket createSocket(String host, int port) throws IOException
创建连接到指定主机和端口的客户端套接字。- Specified by:
-
createSocket在接口RMIClientSocketFactory - 参数
-
host- 主机名 -
port- 端口号 - 结果
- 一个连接到指定主机和端口的套接字。
- 异常
-
IOException- 如果套接字创建期间发生I / O错误 - 从以下版本开始:
- 1.1
-
createServerSocket
public abstract ServerSocket createServerSocket(int port) throws IOException
在指定端口上创建服务器套接字(端口0表示匿名端口)。- Specified by:
-
createServerSocket在接口RMIServerSocketFactory - 参数
-
port- 端口号 - 结果
- 指定端口上的服务器套接字
- 异常
-
IOException- 如果在创建服务器套接字期间发生I / O错误 - 从以下版本开始:
- 1.1
-
setSocketFactory
public static void setSocketFactory(RMISocketFactory fac) throws IOException
设置RMI获取套接字的全局套接字工厂(如果远程对象与特定客户端和/或服务器套接字工厂没有关联)。 RMI插座工厂只能设置一次。 注意:只有当当前安全管理器允许设置套接字工厂时,才可以设置RMISocketFactory; 如果不允许,将抛出SecurityException。- 参数
-
fac- 套接字工厂 - 异常
-
IOException- 如果已经设置了RMI套接字工厂 -
SecurityException- 如果存在安全管理员,并且其checkSetFactory方法不允许操作。 - 从以下版本开始:
- 1.1
- 另请参见:
-
getSocketFactory(),SecurityManager.checkSetFactory()
-
getSocketFactory
public static RMISocketFactory getSocketFactory()
返回由setSocketFactory方法设置的套接字工厂。 如果没有设置套接字工厂,则返回null。- 结果
- 插座工厂
- 从以下版本开始:
- 1.1
- 另请参见:
-
setSocketFactory(RMISocketFactory)
-
getDefaultSocketFactory
public static RMISocketFactory getDefaultSocketFactory()
返回对此RMI实现使用的默认套接字工厂的引用。 这将是RMI运行时使用的工厂,getSocketFactory返回null。- 结果
- 默认的RMI套接字工厂
- 从以下版本开始:
- 1.1
-
setFailureHandler
public static void setFailureHandler(RMIFailureHandler fh)
如果服务器套接字创建失败,则设置由RMI运行时调用的故障处理程序。 默认情况下,如果没有安装故障处理程序并且服务器套接字创建失败,则RMI运行时会尝试重新创建服务器套接字。如果有安全管理员,则该方法首先调用安全管理器的
checkSetFactory方法,以确保允许操作。 这可能会导致一个SecurityException。- 参数
-
fh- 故障处理程序 - 异常
-
SecurityException- 如果安全管理器存在,并且其checkSetFactory方法不允许操作。 - 从以下版本开始:
- 1.1
- 另请参见:
-
getFailureHandler(),RMIFailureHandler.failure(Exception)
-
getFailureHandler
public static RMIFailureHandler getFailureHandler()
返回由setFailureHandler方法设置的套接字创建失败的处理程序。- 结果
- 故障处理程序
- 从以下版本开始:
- 1.1
- 另请参见:
-
setFailureHandler(RMIFailureHandler)
-
-