927
技術社區[雲棲]
關於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