Java RMI客户端和远程服务器连接被拒绝到本地主机

克罗斯

我不太熟悉Java RMI。我正在尝试实现简单的RMI通信,但是遇到了问题。

这是我的RMI客户

public class MainClientApplication {

    public static final String FILE_NAME_RMI_POLICY = "rmi.policy";
    public static final String RMI_DOMAIN = "mydomain.net";
    public static final String RMI_ENDPOINT = "/MD5Decrypter";
    public static final String PROTOCOL = "rmi://";

    public static void main(String[] args) {
        System.out.println(System.getProperty("user.dir") + File.separator + FILE_NAME_RMI_POLICY);
        System.setProperty("java.security.policy", System.getProperty("user.dir") + File.separator + FILE_NAME_RMI_POLICY);
        String remoteHost = String.format("%s%s%s", PROTOCOL, RMI_DOMAIN, RMI_ENDPOINT);
        System.setSecurityManager(new SecurityManager());
        try {
            ComputeEngine computeEngine = (ComputeEngine) Naming.lookup(remoteHost);
            SwingUtilities.invokeLater(() -> new MainWindow("MD5 Decryption", computeEngine));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

交流界面

public interface ComputeEngine extends Remote {
    Object executeTask(Task t) throws RemoteException;
}

我的服务器

public class MainServer {
    public static final int PORT = 1099;
    public static final String RMI_ENDPOINT = "MD5Decrypter";
    public static final String FILE_NAME_RMI_POLICY = "rmi.policy";
    public static final String RMI_DOMAIN = "mydomain.net";
    public static final String PROTOCOL = "rmi://";

   public MainServer() {
    try {
        System.setProperty("java.security.policy", System.getProperty("user.dir") + File.separator + FILE_NAME_RMI_POLICY);
        //System.setProperty("java.rmi.server.hostname", RMI_IP);
        System.setProperty("java.rmi.server.hostname", RMI_DOMAIN);
        System.setSecurityManager(new SecurityManager());
        ComputeEngine computeEngine = new ComputeEngineExecutor();
        //  Naming.rebind(String.format("%s%s:%d/%s", PROTOCOL, RMI_DOMAIN, PORT, RMI_ENDPOINT), computeEngine);
        Naming.rebind(RMI_ENDPOINT, computeEngine);
        System.out.println("Successfully started RMI Server");
    } catch (RemoteException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
}

    public static void main(String[] args) {
        MainServer mainServer = new MainServer();
    }

}

rmi.policy

grant {
    permission java.net.SocketPermission "*:1024-65535", "connect, accept";
    permission java.io.FilePermission "-", "read";
    permission java.net.SocketPermission "*:80", "connect";
};

因此,我已经在服务器上启动了rmiregistry rmiregistry 1099一切都运行良好,直到调用远程对象方法为止。

这是我的步骤

让我们考虑一下我的域是mydomain.net,我使用静态IP将其托管在家里的服务器上。

  1. rmiregistry在服务器上运行
  2. 在服务器上运行服务器应用程序
  3. 在任何PC上运行客户端应用程序
  4. 单击按钮调用远程方法

因此似乎一切都成功连接并绑定,因为如果强制输入无效的域,端点,或者如果未启动rmiregistry则拒绝-java.rmi.ConnectException会抛出该错误。

但是,当我尝试调用远程对象上的任何方法时,已经成功检索到的BTW会抛出一个 java.rmi.ConnectException

java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
    at com.sun.proxy.$Proxy0.executeTask(Unknown Source)
    at ui.MainWindow.lambda$initGui$0(MainWindow.java:49)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

据我了解,问题在于它(服务器)迫使我连接到本地主机而不是远程主机。

本地主机上的PS一切正常(一台PC上的客户端和服务器)

请帮助解决此问题。

编辑

我忘了告诉我,我尝试设置的属性java.rmi.server.hostname,在这种情况下,启动服务器并花费很多时间以异常结束。

用户名

保留127.0.0.1问题(由解决)java.rmi.server.hostname,现在您的问题是连接超时。这将由您的防火墙引起。您需要在特定端口上导出远程对象,并且需要在防火墙中打开该TCP端口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java-将客户端连接到没有本地主机的服务器

Java RMI客户端如何使用域名连接到Java RMI服务器

Java Open套接字获取连接拒绝尝试连接到本地主机服务器

Java RMI在客户端变量和客户端本身以及服务器的远程调用上具有不同的实例化实例

从Java游戏服务器到客户端的TCP和UDP连接

Java RMI-使客户端成为服务器

Java RMI-客户端到服务器的调用

Java服务器-是否可以获取客户端用于连接的主机名?

Java-从客户端获取服务器的主机名和/或IP地址

C#.NET远程服务器和Java客户端

从客户端将数据传递到服务器后,由于 Java Socket 中的 parseInt 导致“连接被拒绝:连接”错误?

将 JDBC Java 客户端连接到本地主机上的 SQL Developer

连接客户端服务器Java

Java 服务器-客户端连接重置

SSH客户端到telnet服务器JAVA

Java RMI无法从外部客户端连接到主机

转到服务器和Java客户端通信

Java服务器和客户端时间

Java客户端和Erlang服务器?

TCP服务器和客户端Java

将Java客户端,RabbitMQ和Celery部署到服务器

JAVA客户端并发修改异常通过服务器到客户端

Java RMI:如何使在客户端屏幕上的服务器打印消息上调用的客户端存根方法?

如何使用Java RMI从服务器向客户端发送消息?

Java RMI:更新服务器中的客户端对象

Couchbase客户端尝试在配置为远程服务器时连接到本地主机

Android应用程序需要帮助来连接到Java本地主机服务器

如何使用远程服务器主机配置轴突服务器客户端?(没有本地主机)

如何从Java websocket服务器访问客户端主机名,http标头等?