2010-01-12 94 views

回答

2

這是pingig子任務的implementation。使用引用的有效負載創建線程池和線程不應太複雜。

編輯

如果你可以修改這些設備上的客戶端代碼,我提出一個自定義的協議,而不是使用echo端口 - 有點像心跳,你經常發小信息給客戶端(上標準或不同的端口),並期望在規定時間內得到答案。

編輯2

對於螺紋基礎知識,我真的建議在尋找一個Java教程。首先:實現類似public class PingThread extends Thread的類,並將鏈接中的代碼放在run方法中的while(true) {...}循環中。使用Thread.sleep()可以在同一個循環中添加ping之間的等待時間。 如果您確實需要ThreadGroup,請覆蓋構造函數Thread(ThredGroup group, String name),以便可以在指定的組中創建PingThread。

您可能需要執行一個開關停止PingThread(應該由幾乎每個Java教程覆蓋),

+0

它不談論線程的概念。只有可用的測試和ping才能得到關注。 – MalarN 2010-01-12 10:56:30

0

的Java沒有默認實現ICMP的,所以它不是能ping通從Java主機與標準庫。您的其他選擇是尋找Java ICMP實現(我不知道是否存在),或者從Java調用系統上的'ping'可執行文件並解析輸出。

編輯:Andreas_D的鏈接指示InetAddress.isReachable()使用ICMP迴應請求來ping主機,這樣就可以實現ping。

您可以從該網頁採取了ReachableTest代碼並更改ReachableTest類到一個Runnable然後你就可以在自己的線程或使用執行服務從java.util.concurrent中運行:

public class ReachableTest implements Runnable { 
    private String host; 

    public ReachableTest(String host) { 
    this.host = host; 
    } 

    public void run() { 
    try { 
     InetAddress address = InetAddress.getByName(host); 
     System.out.println("Name: " + address.getHostName()); 
     System.out.println("Addr: " + address.getHostAddress()); 
     System.out.println("Reach: " + address.isReachable(3000)); 
    } 
    catch (UnknownHostException e) { 
     System.err.println("Unable to lookup " + host); 
    } 
    catch (IOException e) { 
     System.err.println("Unable to reach " + host); 
    } 
    } 
}