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