android 何如查找内网设备 IP
前沿
最近在与嵌入式设备打交道,需要对设备进行配网。发现 UpnP 服务不稳定,经常收不到设备的信息。就想着能不能通过内网查找到 IP 后,直接与设备通信,不停的请求设备信息。
1.Android 端通过 UDP 组播(Multicast)查找设备
如果嵌入式设备支持 UDP 组播,Android 端可以向 组播地址 发送查询请求,设备收到后回复自己的 IP。
Android 发送 UDP 组播请求:
fun sendMulticastRequest() {
Thread {
try {
val multicastGroup = InetAddress.getByName("239.255.255.250") // 组播地址
val socket = MulticastSocket(9999) // 监听端口
socket.joinGroup(multicastGroup)
val request = "DISCOVER_DEVICE".toByteArray()
val packet = DatagramPacket(request, request.size, multicastGroup, 9999)
socket.send(packet)
val buffer = ByteArray(1024)
val responsePacket = DatagramPacket(buffer, buffer.size)
socket.receive(responsePacket)
val response = String(responsePacket.data, 0, responsePacket.length)
Log.d("UDP", "收到设备回复: $response")
} catch (e: Exception) {
e.printStackTrace()
}
}.start()
}
嵌入式设备(C 语言)监听组播并回复:
#define MULTICAST_GROUP "239.255.255.250"
#define MULTICAST_PORT 9999
#define RESPONSE_MSG "DEVICE_INFO:192.168.1.100:9999"
int main() {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
struct