JAVA RMI 阿里云服务器连接超时问题

需求,A应用、B应用进行通讯,使用rmi,在本地测试完毕,部署到阿里云服务器。一直报如下错:

java.rmi.ConnectException: Connection refused
...

查找资料后,发现:rmi有两个端口,一个是服务注册端口(默认1099),一个是通讯端口(不指定的话,随机分配)

解决方案:
在rmi服务端新增SMRMISocket 类

public class SMRMISocket extends RMISocketFactory {
    public Socket createSocket(String host, int port)
            throws IOException{
        return new Socket(host,port);
    }
    public ServerSocket createServerSocket(int port)
            throws IOException {
        if (port == 0)  port = 8080;//不指定就随机
        return new ServerSocket(port);
    }
}

在rmi服务端new UnicastRemoteObject()之前,新增如下代码

try {
    RMISocketFactory.setSocketFactory(new SMRMISocket());
} catch (IOException e) {
    e.printStackTrace();
}

特此记录
感谢:https://m635674608.iteye.com/blog/1936281

你可能感兴趣的:(java)