1.客户端和服务端分布部署在两个网络中,两个网络之间有硬件防火墙,只允许开放制定端口用于客户端访问服务端。
2.服务端通过某端口(如9999)提供RMI服务,防火墙开放了9999端口,允许客户端通过9999访问服务端
3.测试发现上述处理后,客户端仍然不能调用RMI接口成功
4.经过查询资料,发现客户端在调用RMI接口过程中,首先会利用9999端口请求一个RMI远程对象,然后会利用新的随机的端口同这个RMI远程对象建立连接,进行点对点通讯。
问题就在这里,硬件防火墙只允许开通制定端口,而调用RMI过程的端口时随机分配的。
请较各位有无解决方法?是不是可以做到那个随机端口也能够固定下来?可提供的参考:UnicastRemoteObject的构造函数,一般用的没带参数,但是JDK提供了带端口的参数的构造函数UnicastRemoteObject(int port).我觉得这个应该能解决问题,但是还没试验成功,不太清除要怎么利用这个来弄。
2.服务端通过某端口(如9999)提供RMI服务,防火墙开放了9999端口,允许客户端通过9999访问服务端
3.测试发现上述处理后,客户端仍然不能调用RMI接口成功
4.经过查询资料,发现客户端在调用RMI接口过程中,首先会利用9999端口请求一个RMI远程对象,然后会利用新的随机的端口同这个RMI远程对象建立连接,进行点对点通讯。
问题就在这里,硬件防火墙只允许开通制定端口,而调用RMI过程的端口时随机分配的。
请较各位有无解决方法?是不是可以做到那个随机端口也能够固定下来?可提供的参考:UnicastRemoteObject的构造函数,一般用的没带参数,但是JDK提供了带端口的参数的构造函数UnicastRemoteObject(int port).我觉得这个应该能解决问题,但是还没试验成功,不太清除要怎么利用这个来弄。
import java.io.*;
import java.net.*;
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 = 1099;
return new ServerSocket(port);
}
}
你自己写一个类,在实例化rmi对象前调用,即可统一1099和那个随机端口为一个端口