Tôi hiện đang phát triển một ứng dụng Android sử dụng SDK> = 16 để có thể khám phá các thiết bị Android khác nhau (sau này cũng là thiết bị iOS) trong mạng cục bộ bằng cách sử dụng đài WiFi.Phát hiện thiết bị trong mạng cục bộ
Đoán đầu tiên của tôi là sử dụng phát đa hướng hóa ra không hoạt động trên Samsung Galaxy S2: các gói chỉ được nhận khi được gửi từ cùng một thiết bị.
Dự đoán thứ hai của tôi là chủ động quét mạng bằng dải địa chỉ IP giới hạn và chờ phản hồi phù hợp. Thật không may, điều này ngụ ý rằng mạng sử dụng DHCP để giải quyết các địa chỉ IP.
Không có giải pháp nào ở trên dường như là giải pháp hoàn hảo.
giải pháp hiện tại của tôi cho đoán đầu tiên của tôi:
public class MulticastReceiver extends AsyncTask<Activity, Integer, String> {
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;
}
}
Mã này kết quả trong việc ngăn chặn trên đường dây socket.receive (recv); Nếu tôi chỉ định thời gian chờ, tôi sẽ nhận được một ngoại lệ hết thời gian chờ.
Nhưng wifi trực tiếp ngụ ý rằng bạn mất kết nối với mạng cục bộ, phải không? Tôi vẫn muốn có thể truy cập internet trong khi khám phá các thiết bị khác. Ngoài ra cho mục đích thử nghiệm, nó sẽ được tốt đẹp để có thể cũng khám phá ra một máy địa phương chạy một os không android. – anopheles
Sau đó thử NSD. Quét không phải là cách để đi, với một quản trị mạng nó trông giống như một cuộc tấn công. –
Không NSD sử dụng phát đa hướng dưới mui xe? – anopheles