以前没注意,rmi这东西竟然要2套端口,一个是都知道的1099引擎端口,另外一个是通信的服务端口, 如果不指定的话会随机指定。比较麻烦。
看到了这个学习了下。
http://dev.firnow.com/course/3_program/java/javaxl/2008629/129098.html
1、增加一个文件SMRMISocket.java
01 | import java.rmi.server.*; |
03 | import java.io.*; import java.net.*; |
05 | public class SMRMISocket extends RMISocketFactory { |
07 | public Socket createSocket(String host, int port) throws IOException{ |
09 | return new Socket(host,port); |
13 | public ServerSocket createServerSocket( int port) throws IOException { |
15 | if (port == 0 ) port = 10990 ; |
19 | return new ServerSocket(port); |
2、在实例化UnicastRemoteObject的子类前加入一下代码:
3 | RMISocketFactory.setSocketFactory ( new SMRMISocket()); |
这样的话RMI分配的端口就被固定了,防火墙只需要打开1099和10990端口即可。