我真正想做的就是通过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. 如何获取任何黑莓设备的IP/MAC地址?
- 3. 从Android应用获取设备的MAC地址和IP地址
- 4. 如何获取Java中所有网络设备的IP地址
- 5. 如何在React Native上获取设备的IP地址?
- 6. 如何检测本地网络上其他设备的IP地址?
- 7. 连接到3G移动网络时获取Android设备的IP地址
- 8. 移动设备MAc地址
- 9. 如何从设备获取默认IP地址?
- 10. 如何获取IP地址?
- 11. 如何获取IP地址?
- 12. Genymotion设备将无法启动 - Genymotion虚拟设备无法获取IP地址
- 13. 获取IP地址
- 14. 获取IP地址
- 15. 获取IP地址
- 16. Kubernetes:获取网络上其他Pod的IP地址
- 17. 如何找到活动的AirPlay设备的IP地址?
- 18. 获取用于从Android设备连接到Firebase的IP地址
- 19. 当连接到WiFi时获取ios设备的IP地址
- 20. 使用API获取Android设备的IP地址
- 21. 获取iPhone或iPad设备的IP地址使用Swift 3
- 22. 如何获取系统的IP地址
- 23. 如何获取后端的IP地址?
- 24. 如何获取访问其他网站的用户的IP地址?
- 25. 获取本地IP地址
- 26. 在ad hoc网络中获取其他IP地址
- 27. 获取ip地址的值
- 28. 获取我的IP地址
- 29. 如何在PageMethod中获取IP地址?
- 30. 如何获取IP地址[MYSQL]
听起来像是你想要做的事,如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