RMIはどのように分配ポートを固定するか.
1418 ワード
RMIが使用する範囲が制限されているのは主に2つの原因があり、その1つはjavaでなければ、プラットフォームの異性性が制限されなければならない.二つ目は、ファイアウォールを通り抜けるのは不便です.ここでは、RMIが固定割り当てポートを介してファイアウォールを通り抜ける方法について説明します.RMIがファイアウォールを通り抜けるのが不便なのは、主にRMIサービスが登録したポート(デフォルト1099)のほかに、RMIとの通信には別のポートが必要で、別のポートはランダムに割り当てられているため、RMIのお客様がファイアウォールを通じてRMIサービスと通信できるようにするには、ランダムに割り当てられたポートを固定する必要があります.具体的な方法は以下の通りです.
1、ファイルSMRMISocketを追加する.java
}2、UnicastRemoteObjectのサブクラスをインスタンス化する前にコードを追加します.
これでRMIが割り当てたポートは固定され、ファイアウォールは1099と10990ポートを開くだけです.
1、ファイルSMRMISocketを追加する.java
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(new SMRMISocket());
} catch (Exception ex) {
}
これでRMIが割り当てたポートは固定され、ファイアウォールは1099と10990ポートを開くだけです.