我真正想做的就是通過wifi廣播一條消息(假設其他單元已經創建了應用程序,但我不知道它的IP),所以應用程序在收到該消息時會返回一個消息與該設備的IP通過WiFi,我想這種情況下的理想情況下,這兩個設備運行相同的應用程序,我創建的只是想添加功能,通過無線廣播一條消息到其他設備,是否有可能或者如何?如何獲取其他移動設備的IP地址?
2
A
回答
3
我用Java創建了這個演示程序。每個主機(Android設備)都將運行客戶端和服務器代碼。客戶端不斷地在多播地址上發佈其IP地址,其中所有其他設備正在監聽並跟蹤它。同一個設備也是同一個多播地址上的一個監聽器,因此他可以在發送數據包時發現其他Android。請注意,此架構在資源使用方面非常繁重,根本無法擴展。我只是寫了這個與數據包玩,它也似乎最接近的回答你的問題
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class Main {
public static final int PORT = 2345;
public static final String MULTICAST = "224.0.0.99";
/*
* A simple server that prints the name of the first
* device discovered and then terminates
*/
static class Server extends Thread{
@Override
public void run() {
try {
MulticastSocket socket = new MulticastSocket(PORT);
InetAddress group = InetAddress.getByName(MULTICAST);
socket.joinGroup(group);
byte[] buf = new byte[256];
// receive request
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
System.out.printf("SERVER receives: %s", new String(packet.getData()));
socket.leaveGroup(group);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
* This client send own IP address to all machines
* listening on MULTICAST
*/
static class Client extends Thread{
@Override
public void run() {
try {
MulticastSocket socket = new MulticastSocket();
socket.setBroadcast(true);
byte[] buffer = "I'm a new client. My IP is XXX.XXX.XXX.XXX".getBytes();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(MULTICAST), PORT);
socket.send(packet);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws InterruptedException {
new Server().start();
Thread.sleep(1000); // Make sure server started
new Client().start();
}
}
關於Android的部分,你需要許可android.permission.CHANGE_WIFI_MULTICAST_STATE
因爲多播包裝是由Android軟件開發包過濾掉了,所以你將使用WifiManager.MulticastLock
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wm.createMulticastLock("mydebuginfo");
multicastLock.acquire();
1
我幾天前就在想這件事。我的結論是,你不能在設備的IP上進行中繼,因爲它們可以通過DHCP獲取,並且每次都可以更改。所以,一個非常簡單的方法是將附加在電子郵件中的數據發送給接收方。
你必須實現一個解析器,它可以讀取數據(假設它是用XML文件寫的)並在接收器上做你需要的。爲了達到這個目的,你必須註冊正確的組件(Activity)來響應你傳輸文件類型的Intent ACTION_VIEW, XML。
希望它能幫助!
相關問題
- 1. 如何獲取我的Android設備的動態IP地址
- 2. 獲取UPnP設備的IP地址
- 3. 獲取設備的IP地址
- 4. 如何獲取任何黑莓設備的IP/MAC地址?
- 5. 從Android應用獲取設備的MAC地址和IP地址
- 6. 獲取設備連接到局域網的設備的IP地址/ MAC地址
- 7. 如何獲取Java中所有網絡設備的IP地址
- 8. 如何在React Native上獲取設備的IP地址?
- 9. 如何檢測本地網絡上其他設備的IP地址?
- 10. 連接到3G移動網絡時獲取Android設備的IP地址
- 11. 移動設備MAc地址
- 12. 如何從設備獲取默認IP地址?
- 13. 如何從Bluemix IoT服務獲取設備/網關IP地址?
- 14. 如何藉助ip地址獲取硬件設備序列號?
- 15. 如何從MAC或IP地址獲取設備類型?
- 16. 如何獲取IP地址?
- 17. 如何獲取IP地址?
- 18. iOS設備的IP地址
- 19. Genymotion設備將無法啓動 - Genymotion虛擬設備無法獲取IP地址
- 20. 如何通過編程方式在同一網絡上獲取其他支持Wifi的設備的IP地址?
- 21. 如何從asp.net c#中的ios設備獲取本地ip地址?
- 22. 獲取WiFi我的設備的直接IP地址
- 23. 獲取IP地址
- 24. 獲取IP地址
- 25. 獲取IP地址
- 26. Kubernetes:獲取網絡上其他Pod的IP地址
- 27. 如何找到活動的AirPlay設備的IP地址?
- 28. 在xamarin中獲取iOS設備的ip地址
- 29. 獲取用於從Android設備連接到Firebase的IP地址
- 30. 當連接到WiFi時獲取ios設備的IP地址
聽起來像是你想要做的事,如Bonjour服務的iPhone,你檢查出這個問題嗎? http://stackoverflow.com/questions/2474143/how-can-i-discover-zeroconf-bonjour-services-on-android-im-having-trouble-wi – 2012-02-29 19:22:06