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

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( 10003 null ));
 
 
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( 10003 null ));
 
 
}
 
 
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 +  "" );
 
 
}
 
 
}
 
 

你可能感兴趣的:(android 获取局域网内其他手机的ip)