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

wanglijuan428 2012-07-12 09:52:19
我想获取到连接同一个路由的另外一台手机ip地址,然后建立两台手机之间的wifi socket通信,请问各位大侠有什么号的解决办法没???
...全文
5601 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
dayrunner 2014-08-13
  • 打赏
  • 举报
回复
能确定搜到的ip就是现在连接到局域网的吗
亲大爷 2014-06-11
  • 打赏
  • 举报
回复
求3楼的IpAdapter代码,446008135@qq.com
亲大爷 2014-06-11
  • 打赏
  • 举报
回复
求IpAdapter代码,446008135@qq.com
ylzhoutao 2014-05-22
  • 打赏
  • 举报
回复
楼主能给份源码吗?
tiantiansmb 2014-03-21
  • 打赏
  • 举报
回复
感觉需要权限啊 不好弄
sll_docking 2013-08-14
  • 打赏
  • 举报
回复
楼主这个问题你解决了吗?
wangruncain 2013-06-25
  • 打赏
  • 举报
回复
引用 13 楼 aldlc9585 的回复:
我也想要那个源码!!!!
wangruncain@163.com
  • 打赏
  • 举报
回复
我也想要那个源码!!!!
u010157394 2013-04-11
  • 打赏
  • 举报
回复
IpAdapter怎么写啊
南瓜饼 2013-04-08
  • 打赏
  • 举报
回复
那是个自定义的adapter
「已注销」 2013-03-22
  • 打赏
  • 举报
回复
我说说我的想法。手机往一个地址发组播消息,把自己的IP地址,端口发送出去。另一端接收数据包,解析出IP地址,端口,不就可以进行Socket通讯了吗?
sxylvzzn 2012-12-18
  • 打赏
  • 举报
回复
不好意思,您的IpAdapter是不是自己编写的类?如果是的话,请不吝赐教把IpAdapter以及前台xml代码都贴出来好吗?
xrxqxts 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
Java code

public class WifiDemoActivity extends Activity {


private Button mTestButton;


private WifiManager mWifiManager;


private TextView iptextview;


staticintthreadCount = 0;
……
[/Quote]
IpAdapter编译不过啊
wanglijuan428 2012-07-16
  • 打赏
  • 举报
回复
换个思路的话,我想将一台手机设置成静态的ip,然后另一台直接去连接这个ip,
可是为什么设置的静态ip没有起作用呢??
一刀 2012-07-13
  • 打赏
  • 举报
回复
连接一般要先发现对方主机,然后再建立连接
发现的过程可以有好多种
你可以去那台机器上执行个命令一查就能知道,这是笨办法,也是连的机器不多的偷懒办法
也可以对局域网进行一下扫描,PING或者其它的什么方式都行,
其实也可以直接对局域网所有IP对要连的端口进行连接,如果有主机并能连上,肯定是能连的上,也省的专门去扫描了。。。。
希望对你有用
南瓜饼 2012-07-13
  • 打赏
  • 举报
回复
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 + "");


}


}


肚皮会唱歌 2012-07-13
  • 打赏
  • 举报
回复
我也想知道,或许可以循环ping完局域网内所有IP,但这个肯定很慢。坐等高手!
wanglijuan428 2012-07-13
  • 打赏
  • 举报
回复
怎么都没人回复呢??
sada09 2012-07-13
  • 打赏
  • 举报
回复
System.exit(0);
finish();
这样用 要分清楚,不然出现错误。
sada09 2012-07-13
  • 打赏
  • 举报
回复
Ping 局域网内的所有端口,暂时没想到其他的。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧