rmiファイアウォールを通り抜ける


この間、RMIリモートコールを使用した全文検索サービスを書きました.本机で书き终わったら、テストOK.しかし、サーバに配備されると、サービスが見つからないと報告されます.ネットで大通を探しました.
理由は次のとおりです.
   
RMIは登録ポート以外の通信ポートはサーバがランダムに生成するため,ファイアウォールを通過することは容易ではない.
私がネットで検索した解決方法をここに公開し、他の人に必要な人に便利にします.自分にも便利さを与える.
減点するなら引いてください.
一、普通解決:

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 = 2098;//      
        return new ServerSocket(port);
    }
} 



二、Spring中

  <bean id="rmiSearchService" class="org.springframework.remoting.rmi.RmiServiceExporter">
	<property name="serviceName" value="search"/><!--      -->
	<property name="service" ref="searchService"/>
	<property name="serviceInterface" value="velcro.searchengine.ISearcher"/>
	<property name="registryPort" value="2098"/><!--    -->
	<property name="servicePort" value="2098"/>><!--       -->
	</bean>