关于RMI服务端端口定制的处理办法
文章标题: 关于RMI服务端端口定制的处理办法
作者: javaboy2012
Email:yanek@163.com
qq: 1046011462
关于RMI服务器对外提供服务通常需要两个端口:
注册端口和服务端口
如果不做处理,每次启动服务,提供服务的端口会改变,如果需要固定下来需要做如下处理:
编写一个类如下:
package com.yanek.rmi;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.server.RMISocketFactory;
public class CustomSocket extends RMISocketFactory {
/**
* @param args
*/
public static void main(String[] args) {
}
@Override
public ServerSocket createServerSocket(int port) throws IOException {
if (port==0)
{
port=8866;
}
return new ServerSocket(port);
}
@Override
public Socket createSocket(String host, int port) throws IOException {
System.out.println("host:"+host+" port:"+port);
return new Socket(host,port);
}
}
这样服务端口就是固定为8866了。
注册的端口在启动服务的类里设置:
如下为启动的类:
package com.yanek.cms.rmi;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.RMISocketFactory;
public class RMIServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
CustomSocket cs=new CustomSocket();
try {
RMISocketFactory.setSocketFactory(cs);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LocateRegistry.createRegistry(1099);
Naming.rebind("UserFav", UserFav.getInstance());
System.out.println("RMI Server ready.");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这样,服务程序就通过 8866和1099 对外 提供服务了,设置防火墙只要设置这两个端口开放就可以了。
最后更新:2017-04-03 22:15:47