2015-06-03 201 views
0

我想知道是否可以使用下面的代碼訪問IP地址。但是,即使機器正在運行,每次我都會收到「無法訪問」的信息。我曾嘗試使用多個活着的IP,但我總是得到「無法達到」。請幫忙。IP地址無法訪問

public class CheckIP { 
public static void main(String args[]) throws UnknownHostException, IOException{ 
    String ip = "78.46.84.171"; 

    if(InetAddress.getByName(ip).isReachable(100)){ 
     System.out.println("Reachable."); 
    } 
    else{ 
     System.out.println("Not Reachable."); 
    } 
} 
} 

回答

1

你能從命令行ping機器嗎?例如。 ping 78.46.84.171

按照oracle docs:該地址

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

超時值(以毫秒爲單位)表示嘗試應採取的最大時間量 。如果操作在獲得 答案之前超時,則認爲主機無法訪問。在拋出IllegalArgumentException時,負值將導致 。

總結possbile錯誤:

  • 防火牆阻止ICMP請求? (請參閱上面的ping命令)
  • 也許您的超時時間爲100 ms(嘗試增加到例如1000)
  • 您正在使用Linux/Mac嗎?也許你缺乏執行Ping的特權,所以isReachable(int)實現嘗試TCP-Connect但失敗。 (嘗試一個Windows機器或執行您的程序作爲根或通過sudo
+0

請注意'如果可以獲得特權'。通常它不能。而Windows imp,校正不使用ICMP。所以典型的實現實際上使用TCP端口7。 – EJP