RMI有注册端口和通信端口。
通过以下代码设置的是注册端口:
LocateRegistry.createRegistry(port); //注册端口
注册端口默认是1099
通过以下代码设置的是通信端口:
UnicastRemoteObject.exportObject(rmiService, 0); //随机通信端口
其中第二个参数是通信端口,0表示随机生成通信端口!
还可以通过以下代码来设置通信端口:
RMISocketFactory.setSocketFactory(new MyRMISocket(1000));
其中MyRMISocket对象为自定义RMI socket工厂类:
public class MyRMISocket extends RMISocketFactory {
private int myPort;
public MyRMISocket(int myPort) {
super();
this.myPort = myPort;
}
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 = myPort;//不指定就随机
return new ServerSocket(port);
}
}
一般为了穿越防火墙都需要指定固定的通信端口!