linux rmi端口,RMI 两个端口 - 差不多先生的个人空间 - OSCHINA - 中文开源技术交流社区...
在項目中使用rmi,發布到linux,unix,由于開了防火墻。需要配置防火墻端口。剛開始配置了一個固定端口,死都連接不通,后來同netstat -antup |grep pid 查看進程監聽的端口,,發現原來rmi有2個端口一個是固定的。一個是隨機的。
RMI之所以使用的范圍受限制主要有兩方面原因,其一:必須要是java,平臺的異構性受到限制;其二:穿越防火墻不方便。這里主要談談RMI如何通過固定分配端口來穿越防火墻。 RMI穿越防火墻不方便主要是因為除了RMI服務注冊的端口(默認1099)外,與RMI的通訊還需要另外的端口來傳送數據,而另外的端口是隨機分配的,所以要想RMI的客戶能通過防火墻來與RMI服務通訊,則需要能讓隨機分配的端口固定下來,具體做法如下:
1、增加一個文件SMRMISocket.java
importjava.rmi.server.*;
importjava.io.*;
importjava.net.*;
publicclassSMRMISocketextendsRMISocketFactory {
publicSocket createSocket(String host,intport)throwsIOException{
returnnewSocket(host,port);
}
publicServerSocket createServerSocket(intport)throwsIOException {
if(port ==0)
port = 10990;//不指定就隨機分配了
returnnewServerSocket(port);
}
}
import java.rmi.server.*;
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 = 10990; //不指定就隨機分配了
return new ServerSocket(port);
}
}
2、在實例化UnicastRemoteObject的子類前加入一下代碼:
try{
RMISocketFactory.setSocketFactory(newSMRMISocket());
} catch(Exception ex) {
}
總結
以上是生活随笔為你收集整理的linux rmi端口,RMI 两个端口 - 差不多先生的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 进程 控制终端,linux系
- 下一篇: linux下的c语言mysql编程,详解