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