Android 如何获取其他移动设备的IP地址?
我实际上想做的是通过wifi广播一条消息(假设其他手机上运行着我创建的应用程序,但我还不知道它的IP),这样应用程序在收到该消息时,会通过wifi返回一条带有该设备IP的消息,我在理想情况下考虑这个场景,两台设备都在运行我创建的同一个应用程序,只是想添加通过wifi向其他设备广播消息的功能,这是可能的还是如何实现的?几天前我就在想这个问题。我的结论是,您不能在设备的IP上中继,因为他们可以通过DHCP获得它,并且每次都可以更改。因此,一种非常简单的方法是将附加在电子邮件中的数据发送给接收者 您必须实现一个解析器,该解析器可以读取数据(假设数据写在XML文件中),并在接收器上执行您需要的操作。要实现这一点,您必须注册正确的组件(活动),以响应您传输的文件类型的意向操作视图,例如XMLAndroid 如何获取其他移动设备的IP地址?,android,Android,我实际上想做的是通过wifi广播一条消息(假设其他手机上运行着我创建的应用程序,但我还不知道它的IP),这样应用程序在收到该消息时,会通过wifi返回一条带有该设备IP的消息,我在理想情况下考虑这个场景,两台设备都在运行我创建的同一个应用程序,只是想添加通过wifi向其他设备广播消息的功能,这是可能的还是如何实现的?几天前我就在想这个问题。我的结论是,您不能在设备的IP上中继,因为他们可以通过DHCP获得它,并且每次都可以更改。因此,一种非常简单的方法是将附加在电子邮件中的数据发送给接收者 您必
希望有帮助 几天前我就在想这件事。我的结论是,您不能在设备的IP上中继,因为他们可以通过DHCP获得它,并且每次都可以更改。因此,一种非常简单的方法是将附加在电子邮件中的数据发送给接收者 您必须实现一个解析器,该解析器可以读取数据(假设数据写在XML文件中),并在接收器上执行您需要的操作。要实现这一点,您必须注册正确的组件(活动),以响应您传输的文件类型的意向操作视图,例如XML
希望有帮助 我用Java创建了这个演示程序。每个主机(Android设备)将同时运行客户端和服务器代码。客户端在多播地址上连续发布其IP地址,所有其他设备都在侦听并跟踪该地址。同样的设备也是同一个多播地址上的侦听器,因此他可以在其他机器人发送数据包时发现它们。请注意,这种体系结构占用大量资源,根本无法扩展。我写这篇文章只是为了处理数据报,它似乎也是最接近你问题的答案
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\u WIFI\u MULTICAST\u STATE
,因为多播打包被Android堆栈过滤掉,所以您将使用
我用Java创建了这个演示程序。每个主机(Android设备)将同时运行客户端和服务器代码。客户端在多播地址上连续发布其IP地址,所有其他设备都在侦听并跟踪该地址。同样的设备也是同一个多播地址上的侦听器,因此他可以在其他机器人发送数据包时发现它们。请注意,这种体系结构占用大量资源,根本无法扩展。我写这篇文章只是为了处理数据报,它似乎也是最接近你问题的答案
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\u WIFI\u MULTICAST\u STATE
,因为多播打包被Android堆栈过滤掉,所以您将使用
听起来你想为iPhone做一些类似“你好”的服务,你有没有检查过这个问题?听起来你想为iPhone做一些类似“你好”的服务,你有没有检查过这个问题?好吧,我应该为当地大学的wifi设计它,在那里我们(大多数时候)有来自分配给连接设备的路由器的静态IP。我只是想知道我们在wifi上聊天时发送信息的方式。好的!所以你是在一个封闭的环境中工作!这改变了情景。然后,我认为你应该做一些事情,比如使用TCP数据包,并为客户端/服务器端编程……好吧,我应该为本地大学的wifi设计它,在那里(大多数时候)我们有来自分配给连接设备的路由器的静态IP。我只是想知道我们在wifi上聊天时发送信息的方式。好的!所以你是在一个封闭的环境中工作!这改变了情景。然后,我认为您应该做一些事情,比如使用TCP数据包,并编写客户端/服务器端的程序。。。