RMIはどのように分配ポートを固定するか.

1418 ワード

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