2017-11-04 232 views
0

我是Java RMI中的新成員,並嘗試在不同條件下進行一些學習。我不知道我想要做什麼是否合適。到目前爲止,我已經開發了一個RMI應用程序,其中客戶端提供輸入&獲得該因子。我有4級的應用程序。在運行Java RMI服務器期間聲明變量值

那些隨着代碼如下。

服務器類 - FacServer

import java.rmi.*; 
public class FacServer 
{ 
public static void main(String a[]) throws Exception 
{ 
    FacImpl obj = new FacImpl(); 
    Naming.rebind("FAC",obj); 
    System.out.println("Server started"); 
} 
} 

客戶端類 - FacClient

import java.util.*; 
import java.io.*; 
import java.rmi.*; 

public class FacClient 
{ 
public static void main(String a[]) throws Exception 
{ 
    FacInt obj = (FacInt)Naming.lookup("FAC"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.print("Enter a number: "); 
    String s = null; 
    try { 
    s = br.readLine(); 
    } catch(IOException ioe) { 
    System.err.println(ioe.getMessage()); 
    } 
    int r = Integer.parseInt(s); 
    int n= obj.fac(r); 

    System.out.println("Factorial is "+n); 
} 
} 

實現類 - FacImpl

import java.rmi.server.*; 
public class FacImpl extends UnicastRemoteObject implements FacInt 
{ 
public FacImpl() throws Exception 
{ 
    super(); 
} 
public int fac(int x) 
{ 
int i,j=1; 
for(i=x;i>1;i--) 
j=j*i; 
return j; 
} 
} 

接口類 - FacInt

import java.rmi.Remote; 
public interface FacInt extends Remote 
{ 
public int fac(int x) throws Exception; 
} 

它工作正常。現在我想在服務器端設置一些限制。例如,服務器不會計算超過5的階乘值。我知道我可以輕鬆地在實現類中進行。但是我想在啓動服務器時聲明它。例如,要設置限制5,我應該按以下方式啓動服務器。

的Java FacServer 5

因此,如果客戶端輸入一個值超過5會得到一個錯誤的答覆。是否有可能這樣做?

如果客戶端提供可接受的值,我還可以在服務器端顯示階乘值嗎?

回答

0

您可以隨時用java System.properties在服務器端一樣

java FacServer -Dlimit="5" 

和你的Java類中,你可以像下面取出,並把你的邏輯。

int limit=Integer.parseInt(System.getProperty("limit")); 
+1

非常感謝。我也可以在服務器端顯示階乘值嗎? –

+0

是的。通常在RMI中,您應該只在服務器端代碼中編寫業務邏輯,並且編寫客戶端代碼以使用RMIInterface對象查找服務器,該對象查找與我們作爲參數傳遞的名稱關聯的遠程對象的引用。 – utpal416