Java RMI方法调用连接被OpenVPN拒绝

Grrr,我觉得这应该很明显,但是我找不到解决方法。

出于测试目的,我为RMI应用程序创建了一个简单的客户端和服务器。我可以通过本地网络成功运行客户端和服务器。通过Windows 10内置VPN连接进行连接时,我也可以成功运行该应用程序。但是,当通过OpenVPN连接进行连接时,在成功调用Connection refused to host返回的远程对象上调用方法(客户端代码中的String response = lookup.helloTo(txt);)时,我收到lookup = (RMIInterface)Naming.lookup("//192.168.10.14/MyServer");异常。>

我所有的Google搜索都指出必须设置java.rmi.server.hostname属性,在这种情况下,我必须这样做。我认为问题可能出在VPN客户端IP地址(10.8.0.14)和服务器IP地址(192.168.10.14)之间。我可以成功地将服务器IP地址和telnet ping到服务器上的端口1099。

这是我的代码。我希望有人能看到我遗失或做错的事情,或者我是否在关于VPN客户端IP 服务器IP的正确道路上。

远程界面:

package devel;
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RMIInterface extends Remote {
    public String helloTo(String name) throws RemoteException;
}

服务器:

package devel;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ServerOperation extends UnicastRemoteObject implements RMIInterface {
    private static final long serialVersionUID = 1L;

    protected ServerOperation() throws RemoteException {
        super();
    }

    @Override
    public String helloTo(String name) throws RemoteException {
        System.err.println(name + " is trying to contact!");

        return "Server says hello to " + name;
    }

    public static void main(String[] args) {
        try {
            java.lang.System.setProperty("java.rmi.server.hostname","192.168.10.14");
            java.rmi.registry.LocateRegistry.createRegistry(1099);
            Naming.rebind("//192.168.10.14/MyServer",new ServerOperation());
            System.err.println("Server is ready");
        } catch(Exception exc) {
            System.err.println("Server exception: " + exc.toString());
            exc.printStackTrace();
        }
    }
}

客户

package devel;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import javax.swing.JOptionPane;

public class ClientOperation {
    private static RMIInterface lookup;

    public static void main(String[] args) throws MalformedURLException,RemoteException,NotBoundException {
        lookup = (RMIInterface)Naming.lookup("//192.168.10.14/MyServer");
        String txt = JOptionPane.showInputDialog("What is your name?");

        String response = lookup.helloTo(txt);
        JOptionPane.showmessagedialog(null,response);
    }
}

收到异常:

Exception in thread "main" java.rmi.connectexception: Connection refused to host: 192.168.10.14; nested exception is: 
    java.net.connectexception: Connection timed out: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at java.rmi.server.RemoteObjectinvocationHandler.invokeRemoteMethod(Unknown Source)
    at java.rmi.server.RemoteObjectinvocationHandler.invoke(Unknown Source)
    at com.sun.proxy.$Proxy0.helloTo(Unknown Source)
    at devel.ClientOperation.main(ClientOperation.java:17)
Caused by: java.net.connectexception: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at sun.rmi.transport.proxy.RMIDirectsocketFactory.createSocket(Unknown Source)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
    ... 8 more
jinjin1991 回答:Java RMI方法调用连接被OpenVPN拒绝

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2605103.html

大家都在问