2012-04-13 46 views
3

下面是一個靜態方法,用於檢查另一方RMI服務器是否在線,我基本上調用一個方法,如果它回覆true,則表示連接已打開,如果它沒有回覆,給出了一個例外,這意味着什麼是錯的。有沒有更好的方法來做到這一點?有沒有更好的方法來加快這個過程?如果存在連接性,則它返回的值很快,但如果不是,則需要一段時間。更好的方法來檢查RMI連接

public static boolean checkIfOnline(String ip,int port) 
{ 
    boolean online = false; 
    try { 

    InetAddress ipToConnect; 
    ipToConnect = InetAddress.getByName(ip); 

    Registry registry = LocateRegistry.getRegistry(ipToConnect.getHostAddress(),port); 
    ServerInterface rmiServer = (ServerInterface)registry.lookup("ServerImpl"); 

    online = rmiServer.checkStudentServerOnline(); 

    if(online) 
    { 
     System.out.println("Connected to "+ipToConnect); 
    } 

    } catch (RemoteException e) { 

     System.out.println(e.getMessage()); 
     //e.printStackTrace(); 
     return false; 
    } catch (NotBoundException e) { 
     System.out.println(e.getMessage()); 
     //e.printStackTrace(); 
     return false; 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return online; 

} 
+2

您的'ping'方式對我來說似乎很合理。 – Anonymous 2012-04-13 07:02:10

回答

3

測試任何資源是否是最好的辦法就是嘗試使用它。這將成功或失敗,失敗告訴你它不可用(或其他錯誤)。

基於預先執行附加代碼的任何方法都只是試圖預測未來。它有幾個問題,其中包括測試錯誤的事情和測試與使用之間狀態的變化。