2015-07-19 154 views
0
public boolean isReachable(String ipAddress, int port, int timeout) 
{ 
    Socket socket = new Socket(); 
    Exception exception = null; 
    try { 
     socket.connect(new InetSocketAddress(ipAddress, port), timeout); 
    } 
    catch (IOException e) { exception = e; } 

    finally { 
     try { socket.close(); } catch (Exception e) {e.printStackTrace(); } 
    } 
    return exception == null; 

} 

這段代碼當我連接到互聯網的工作。但它也適用於我從ISP端斷開(例如,當adsl服務日期已過期或流量已完成時)。 請告訴我問題在哪裏?如何檢查特定端口上的IP地址的連通性?

+0

你可以試試這個代碼塊嗎?嘗試socket.connect(新的InetSocketAddress(ipAddress,端口),超時); \t返回true; } catch(Exception e){return false; } –

回答

0

你應該去InetAddress類具有isReachable()方法,即由文檔應:

公共布爾isReachable(INT超時) 拋出IOException異常

該地址

測試是否可達。盡力通過實施作出努力到達主機,但防火牆和服務器 配置可能會阻止導致無法訪問的狀態 而一些特定的端口,可訪問請求。如果可以獲得特權,典型實現 將使用ICMP ECHO請求,否則它將嘗試在目的地主機的端口7(Echo) 上建立TCP連接。

1

交通阻斷策略改變從ISP到ISP。檢查站點是否真正可用的唯一確定方法是嘗試獲取實際的響應流並對其進行分析。

HTTP服務器的顯而易見的方法是,使用URLConnection發送GET /請求,檢查響應代碼是否爲200 OK。但是沒有通用的方法來檢查任何類型的服務器 - 你需要知道通常的響應是什麼樣的。

+0

對不起@Ivan,剛剛獲得審查權限,並在隊列中迷路了。以爲我在看問題,而不是回答。我的錯。刪除評論。我會高興地扭轉downvote,但它被鎖定。如果你編輯你的答案,我只能扭轉它。對不起給你造成麻煩,看起來你做的一切都正確,我只是搞砸了。 –

+1

好吧沒問題。 (編輯它) –

相關問題