模块  java.rmi
软件包  java.rmi.server

Class RMISocketFactory

  • 实现的所有接口
    RMIClientSocketFactoryRMIServerSocketFactory

    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

        public RMISocketFactory()
        构造一个 RMISocketFactory
        从以下版本开始:
        1.1
    • 方法详细信息

      • 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)