- 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 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实现使用的默认套接字工厂的引用。 当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)
-
-