0
我想弄清楚最好的方式來遍歷範圍內的所有ips(IE 192.168.5.0-192.168.5.255)來查找正在監聽給定端口的設備。以下代碼正在工作,但我擔心我不會找到所有設備,因爲我的套接字上的超時時間太短。捕捉22是我想這超快,但如果我超時它開始永遠。Android Asynctask套接字掃描
private class findNetworkDevices extends AsyncTask<String, Integer, String> {
private String source;
private Activity activity;
private Context context;
public findNetworkDevices(Activity activity) {
this.activity = activity;
context = activity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
for (int dest = 0; dest < 255; dest++) {
String host = "192.168.5." + dest; // TODO: add net address instead of hardcoding
try {
Socket s = new Socket();
s.connect(new InetSocketAddress(InetAddress.getByName(host), 9999), 50);
Log.v(LOG_TAG, "conn:" + s.toString());
if (s.isConnected()) {
Log.v(LOG_TAG, "connected " + host);
foundDevicesArray.add(host);
} else {
return "failed";
}
} catch (Exception e) {
Log.e(LOG_TAG, "Not found", e);
}
}
Log.v(LOG_TAG, "end");
return "All Done!";
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
ListView lv = (ListView) activity.findViewById(R.id.foundDevicesList);
((BaseAdapter) lv.getAdapter()).notifyDataSetChanged();
}
}
在此先感謝。
只是一個小優化。你應該讓循環外部的's s'靜態重用,而不是在每個循環中重新創建它。它可能比's.connect()'小,但肯定會使你的代碼更快。 – ilomambo 2013-02-18 18:16:02