设备网络SDK_Android,android – 本地网络中的设备发现

该博客探讨了在Android应用中实现使用WiFi无线电在局域网内发现设备的问题。作者遇到多播不可靠及IP地址动态分配的挑战。尝试了使用MulticastSocket进行多播监听,但遇到了阻塞问题。博客内容涉及Android SDK、WiFi管理、多播锁以及网络通信技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我目前正在开发一个使用SDK> = 16的

Android应用程序,它应该能够使用WiFi无线电在局域网中发现不同的Android设备(后来也是iOS设备).

我的第一个猜测是使用在我的三星Galaxy S2上无效的多播:仅在从同一设备发送时才接收数据包.

我的第二个猜测是使用有限的IP地址范围主动扫描网络并等待正确的响应.不幸的是,这意味着网络使用DHCP来寻址IP地址.

以上解决方案似乎都不是完美的解决方案.

我目前的第一个猜测解决方案:

public class MulticastReceiver extends AsyncTask {

private static final String host = "224.1.1.1";

private static final int port = 5007;

private static final String TAG = "MulticastReceiver";

protected String doInBackground(Activity... activities) {

WifiManager wm = (WifiManager)activities[0].getSystemService(Context.WIFI_SERVICE);

WifiManager.MulticastLock multicastLock = wm.createMulticastLock("mydebuginfo");

multicastLock.acquire();

String message = "Nothing";

if (multicastLock.isHeld()) {

Log.i(TAG, "held multicast lock");

}

try {

InetAddress addr = InetAddress.getByName(host);

MulticastSocket socket = new MulticastSocket(port);

socket.setTimeToLive(4);

socket.setReuseAddress(true);

socket.joinGroup(addr);

byte[] buf = new byte[5];

DatagramPacket recv = new DatagramPacket(buf, buf.length, addr, port);

socket.receive(recv);

message = new String(recv.getData());

socket.leaveGroup(addr);

socket.close();

} catch (Exception e) {

message = "ERROR " + e.toString();

}

multicastLock.release();

return message;

}

}

此代码导致阻塞行socket.receive(recv);如果我指定超时,我会收到超时异常.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值