android 获取局域网内其他手机的ip

来源:互联网 发布:金蝶数据导出 编辑:程序博客网 时间:2024/04/29 11:55

http://bbs.csdn.net/topics/390131332

public class WifiDemoActivity extends Activity {
 
 
private Button mTestButton;
 
 
private WifiManager mWifiManager;
 
 
private TextView iptextview;
 
 
staticintthreadCount = 0;
 
 
booleanisOver = false;
 
 
staticintpingSize = 0;
 
 
public ArrayList<Map<String, Object>> ping; // ping 后的结果集
 
 
private ListView showiplistview;
 
 
  
 
 
public ArrayList<Map<String, Object>> getPing() { // 用来得到ping后的结果集
 
 
returnping;
 
 
}
 
 
   public void setPing(ArrayList<Map<String, Object>> ping){
 
 
  this.ping=ping;
 
 
   }
 
 
@Override
 
 
protected void onPause() {
 
 
System.exit(0);
 
 
finish();
 
 
super.onPause();
 
 
}
 
 
  
 
 
@Override
 
 
public void onCreate(Bundle savedInstanceState) {
 
 
super.onCreate(savedInstanceState);
 
 
setContentView(R.layout.main);
 
 
ping = new ArrayList<Map<String, Object>>();
 
 
iptextview = (TextView) findViewById(R.id.IPTEXTVIEWID);
 
 
mTestButton = (Button) findViewById(R.id.button1);
 
 
showiplistview = (ListView) findViewById(R.id.SHOWIPLISTVIEWID);
 
 
mTestButton.setOnClickListener(mAllClickListener);
 
 
mWifiManager = (WifiManager) this
 
 
.getSystemService(Context.WIFI_SERVICE);
 
 
}
 
 
@Override
 
 
protected void onResume() {
 
 
isOver = true;
 
 
mUpdaHandler.sendMessage(createMessage(10003null));
 
 
super.onResume();
 
 
}
 
 
private View.OnClickListener mAllClickListener = new View.OnClickListener() {
 
 
  
 
 
@Override
 
 
public void onClick(View v) {
 
 
switch (v.getId()) {
 
 
case R.id.button1:
 
 
if (ping.size() > 0) {
 
 
ping.clear();
 
 
((IpAdapter) showiplistview.getAdapter()).setIpData(ping);
 
 
}
 
 
new Thread() {
 
 
public void run() {
 
 
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
 
 
mWifiManager.getConfiguredNetworks();
 
 
List<WifiConfiguration> list = mWifiManager
 
 
.getConfiguredNetworks();
 
 
for (WifiConfiguration wifiConfiguration : list) {
 
 
String ssid = wifiConfiguration.SSID;
 
 
String mSsid = ssid.substring(1, ssid.length() - 1);
 
 
String result = wifiConfiguration.toString();
 
 
if (mSsid.equalsIgnoreCase(wifiInfo.getSSID())) {
 
 
Log.d("Tag", wifiConfiguration.toString());
 
 
try {
 
 
int i = result.indexOf("LinkAddresses");
 
 
int i1 = result.indexOf("Routes");
 
 
String ipAddress = result
 
 
.substring(i, i1)
 
 
.trim()
 
 
.substring(
 
 
16,
 
 
result.substring(i, i1)
 
 
.length() - 6);
 
 
Log.d("Tag", ipAddress);
 
 
int i2 = result.indexOf("DnsAddresses");
 
 
String mWifiIntAddress = result
 
 
.substring(i2)
 
 
.trim()
 
 
.substring(
 
 
15,
 
 
result.substring(i2)
 
 
.length() - 4);
 
 
Log.d("Tag""WifiInetAddresses   "
 
 
+ mWifiIntAddress);
 
 
String[] s = { mWifiIntAddress, ipAddress };
 
 
mUpdaHandler.sendMessage(createMessage(
 
 
10002, s));
 
 
PingAll(mWifiIntAddress);
 
 
catch (Exception e) {
 
 
Log.e("Tag""erro" + e);
 
 
}
 
 
}
 
 
}
 
 
}
 
 
}.start();
 
 
  
 
 
break;
 
 
  
 
 
default:
 
 
break;
 
 
}
 
 
}
 
 
};
 
 
  
 
 
public void PingAll(String hostAddress) {
 
 
// 首先得到本机的IP,得到网段
 
 
try {
 
 
int k = 0;
 
 
k = hostAddress.lastIndexOf(".");
 
 
String ss = hostAddress.substring(0, k + 1);
 
 
for (int i = 1; i <= 250; i++) { // 对所有局域网Ip
 
 
String iip = ss + i;
 
 
creatLog(WifiDemoActivity.class"PingAll", iip, null);
 
 
Ping(iip);
 
 
}
 
 
  
 
 
// 等着所有Ping结束
 
 
while (isOver) {
 
 
Thread.sleep(3000);
 
 
if (threadCount == 0) {
 
 
isOver = false;
 
 
int k1 = 0;
 
 
String result="";
 
 
result=(String)ping.get(0).get("ip");
 
 
k1=result.lastIndexOf(".");
 
 
result=result.substring(k1+1,result.length());
 
 
int mResult=Integer.valueOf(result);
 
 
for(Map<String, Object> map:ping){
 
 
String s=(String) map.get("ip");
 
 
String s1= s.substring(k1+1,s.length());
 
 
int mS1=Integer.valueOf(s1);
 
 
mResult=mResult>mS1?mResult:mS1;
 
 
}
 
 
Log.d("Tag"""+mResult);
 
 
mUpdaHandler.sendMessage(createMessage(10003null));
 
 
}
 
 
creatLog(WifiDemoActivity.class"pingall""wait......"null);
 
 
}
 
 
catch (Exception e) {
 
 
creatLog(WifiDemoActivity.class"pingAll""", e);
 
 
}
 
 
}
 
 
  
 
 
public void Ping(String ip) {
 
 
// 最多30个线程
 
 
try {
 
 
while (threadCount > 30) {
 
 
Thread.sleep(2);
 
 
}
 
 
creatLog(WifiDemoActivity.class"ping", threadCount + ""null);
 
 
threadCount += 1;
 
 
runPingIPprocess(ip);
 
 
catch (Exception e) {
 
 
creatLog(WifiDemoActivity.class"ping"null, e);
 
 
}
 
 
}
 
 
public void runPingIPprocess(final String ipString) {
 
 
final Thread pingThread = new Thread() {
 
 
  
 
 
@Override
 
 
public void run() {
 
 
try {
 
 
//ping ip地址  
 
 
Process p = Runtime.getRuntime().exec(
 
 
"ping -c 1 -w 5 " + ipString);
 
 
int status = p.waitFor();
 
 
if (status == 0) {
 
 
Map<String, Object> map = new HashMap<String, Object>();
 
 
creatLog(WifiDemoActivity.class"runpingIpProcesses",
 
 
"true" + ipString, null);
 
 
map.put("ip", ipString);
 
 
ping.add(map);
 
 
pingSize++;
 
 
if (pingSize > 10) {
 
 
pingSize = 0;
 
 
//setPing(ping);
 
 
mUpdaHandler
 
 
.sendMessage(createMessage(10001, ping));
 
 
Log.d("Tag""you are number");
 
 
}
 
 
creatLog(WifiDemoActivity.class"run",
 
 
ping.toString(), null);
 
 
else {
 
 
creatLog(WifiDemoActivity.class"runpingIPprocess",
 
 
"false"null);
 
 
}
 
 
threadCount--;
 
 
creatLog(WifiDemoActivity.class"run now ",
 
 
threadCount + ""null);
 
 
catch (Exception e) {
 
 
threadCount--;
 
 
creatLog(WifiDemoActivity.class"runPingIpprocess"null,
 
 
e);
 
 
finally {
 
 
}
 
 
}
 
 
};
 
 
pingThread.start();
 
 
}
 
 
private Handler mUpdaHandler = new Handler() {
 
 
@Override
 
 
public void handleMessage(Message msg) {
 
 
IpAdapter adapter ;
 
 
switch (msg.what) {
 
 
case 10001:
 
 
try {
 
 
Log.d("Tag", ping.toString() + "over");
 
 
ArrayList<Map<String, Object>> pings = (ArrayList<Map<String, Object>>) msg.obj;
 
 
adapter = (IpAdapter) showiplistview.getAdapter();
 
 
adapter.setIpData(getPing());
 
 
creatLog(WifiDemoActivity.class"10001", pings + ""null);
 
 
adapter.notifyDataSetChanged();
 
 
                    isOver=true;
 
 
catch (Exception e) {
 
 
creatLog(WifiDemoActivity.class"1001"null, e);
 
 
}
 
 
break;
 
 
case 10002:
 
 
String[] s = (String[]) msg.obj;
 
 
iptextview.setText("本机IP:" + s[1] + "\n路由器IP:" + s[0]);
 
 
break;
 
 
case 10003:
 
 
adapter = new IpAdapter(WifiDemoActivity.this, ping);
 
 
showiplistview.setAdapter(adapter);
 
 
break;
 
 
default:
 
 
break;
 
 
}
 
 
}
 
 
};
 
 
public static Message createMessage(int what, Object object) {
 
 
Message message = new Message();
 
 
message.what = what;
 
 
message.obj = object;
 
 
return message;
 
 
}
 
 
public static void creatLog(Class class1, String where, String data,
 
 
Exception e) {
 
 
if (e != null) {
 
 
Log.e(class1.getSimpleName() + "  "+where, "erro \n" + e);
 
 
else if (e == null) {
 
 
Log.d(class1.getSimpleName() + "  "+where + "", data + "");
 
 
}
 
 
}
 
 

原创粉丝点击