- java.lang.Object
-
- java.rmi.server.RMISocketFactory
-
- 实现的所有接口
-
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
-
-
构造方法摘要
构造方法 构造器 描述 RMISocketFactory()构造一个RMISocketFactory。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 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实现使用的默认套接字工厂的引用。 当getSocketFactory返回null时,这将是RMI运行时使用的工厂。- 结果
- 默认的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)
-
-