- 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 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获取套接字的全局套接字工厂(如果远程对象与特定客户端和/或服务器套接字工厂没有关联)。
-
-
-
方法详细信息
-
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)
-
-