java.lang.Object
java.rmi.server.RMISocketFactory
- 所有已实现的接口:
-
RMIClientSocketFactory
,RMIServerSocketFactory
public abstract class RMISocketFactory extends Object implements RMIClientSocketFactory, RMIServerSocketFactory
RMISocketFactory
实例被RMI运行时用于获取RMI调用的客户端和服务器套接字。应用程序可以使用setSocketFactory
方法请求RMI运行时使用其套接字工厂实例而不是默认实现。
默认的套接字工厂实现创建直接套接字连接到远程主机。
默认的套接字工厂实现创建绑定到通配符地址的服务器套接字,接受来自所有网络接口的请求。
- 实现注意事项:
-
您可以使用
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版本起:
- 1.1
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract ServerSocket
createServerSocket
(int port) 在指定端口上创建服务器套接字(端口0表示匿名端口)。abstract Socket
createSocket
(String host, int port) 创建连接到指定主机和端口的客户端套接字。static RMISocketFactory
返回此RMI实现使用的默认套接字工厂的引用。static RMIFailureHandler
返回由setFailureHandler
方法设置的套接字创建失败处理程序。static RMISocketFactory
返回由setSocketFactory
方法设置的套接字工厂。static void
设置RMI运行时在服务器套接字创建失败时调用的失败处理程序。static void
设置全局套接字工厂,RMI从中获取套接字(如果远程对象未关联特定的客户端和/或服务器套接字工厂)。
-
Constructor Details
-
RMISocketFactory
public RMISocketFactory()构造一个RMISocketFactory
。- 自1.1版本起:
- 1.1
-
-
Method Details
-
createSocket
创建连接到指定主机和端口的客户端套接字。- 指定者:
-
createSocket
在接口RMIClientSocketFactory
- 参数:
-
host
- 主机名 -
port
- 端口号 - 返回:
- 连接到指定主机和端口的套接字。
- 抛出:
-
IOException
- 如果在套接字创建过程中发生I/O错误 - 自1.1版本起:
- 1.1
-
createServerSocket
在指定端口上创建服务器套接字(端口0表示匿名端口)。- 指定者:
-
createServerSocket
在接口RMIServerSocketFactory
- 参数:
-
port
- 端口号 - 返回:
- 指定端口上的服务器套接字
- 抛出:
-
IOException
- 如果在服务器套接字创建过程中发生I/O错误 - 自1.1版本起:
- 1.1
-
setSocketFactory
设置全局套接字工厂,RMI从中获取套接字(如果远程对象未关联特定的客户端和/或服务器套接字工厂)。RMI套接字工厂只能设置一次。注意: 如果当前安全管理器允许设置套接字工厂,则可以设置RMISocketFactory;如果不允许,则会抛出SecurityException。- 参数:
-
fac
- 套接字工厂 - 抛出:
-
IOException
- 如果RMI套接字工厂已经设置 -
SecurityException
- 如果存在安全管理器且其checkSetFactory
方法不允许该操作。 - 自1.1版本起:
- 1.1
- 参见:
-
getSocketFactory
返回由setSocketFactory
方法设置的套接字工厂。如果未设置套接字工厂,则返回null
。- 返回:
- 套接字工厂
- 自1.1版本起:
- 1.1
- 参见:
-
getDefaultSocketFactory
返回此RMI实现使用的默认套接字工厂的引用。当getSocketFactory
返回null
时,RMI运行时将使用此工厂。- 返回:
- 默认的RMI套接字工厂
- 自1.1版本起:
- 1.1
-
setFailureHandler
设置RMI运行时在服务器套接字创建失败时调用的失败处理程序。默认情况下,如果未安装失败处理程序并且服务器套接字创建失败,则RMI运行时会尝试重新创建服务器套接字。如果存在安全管理器,此方法首先调用安全管理器的
checkSetFactory
方法以确保允许该操作。这可能导致SecurityException
。- 参数:
-
fh
- 失败处理程序 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkSetFactory
方法不允许该操作。 - 自1.1版本起:
- 1.1
- 参见:
-
getFailureHandler
返回由setFailureHandler
方法设置的套接字创建失败处理程序。- 返回:
- 失败处理程序
- 自1.1版本起:
- 1.1
- 参见:
-