2011-12-09 66 views
1

我想對我的項目進行修改,現在項目狀態爲..... 它搜索可用的WiFi網絡,並顯示列表的信息,這個網絡工作正常。現在我想搜索並查看連接到網絡的設備的詳細信息。 有什麼方法可以找到這些設備? 您的評論對我有用,謝謝。wifi搜索連接到同一網絡的設備,即非acces點(對於android)

+0

使用** AppFinder LIB ** [這裏](https://stackoverflow.com/questions/44281905/get-devices-connected-to-same-wifi-network-in-android-programmatically/44284242 #44284242)你的解決方案 – sparkmohit

回答

4

你想發現一個特定的設備?或者你需要所有連接設備的列表?第二個我認爲是不可能的。

編輯

發現特定設備:
使用UDP Broadcast。一些參考可以找到here

某些設備(路由器,硬盤等)支持一些協議,如UPNP

如果您在設備上開發了一個您希望發現的軟件,您可以創建一個監聽特定端口的服務器UDP。 您的客戶只會在該端口上發送一條broadcast消息,您的Server將發送您需要的信息。 Here這是一個簡單的例子。

+0

是的,我想發現所有......但正如你所說這是不可能的。所以爲了進一步建議我搜索特定的設備。謝謝。 – patric

+0

看到我編輯的答案。 –

+0

感謝您的有用和快速的回​​復....我會檢查出來...謝謝。 – patric

10

您可以遍歷IP範圍,並「ping」它們。 這不是最好的/最快的方法(UDP更好),但它在很多情況下都有效。 下面的示例代碼返回連接到當前網絡的IP地址列表。

private int LoopCurrentIP = 0; 

public ArrayList<InetAddress> getConnectedDevices(String YourPhoneIPAddress) { 
    ArrayList<InetAddress> ret = new ArrayList<InetAddress>(); 

    LoopCurrentIP = 0; 

    String IPAddress = ""; 
    String[] myIPArray = YourPhoneIPAddress.split("\\."); 
    InetAddress currentPingAddr; 

    for (int i = 0; i <= 255; i++) { 
     try { 

      // build the next IP address 
      currentPingAddr = InetAddress.getByName(myIPArray[0] + "." + 
        myIPArray[1] + "." + 
        myIPArray[2] + "." + 
        Integer.toString(LoopCurrentIP)); 

      // 50ms Timeout for the "ping" 
      if (currentPingAddr.isReachable(50)) { 

       ret.add(currentPingAddr); 
      } 
     } catch (UnknownHostException ex) { 
     } catch (IOException ex) { 
     } 

     LoopCurrentIP++; 
    } 
    return ret; 
} 
+0

我喜歡那個。有趣的是,你如何循環從0到255,並且在並行循環內部有一個額外的計數器。 – Clerenz

相關問題