日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android ip地址扫描,Android:手机扫描局域网所有ip,并进行socket通讯

發布時間:2025/3/21 Android 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android ip地址扫描,Android:手机扫描局域网所有ip,并进行socket通讯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android 手機局域網掃描PC機;

利用android的ping命令掃描局域網內所有ip,

并對其進行socket通信

import java.io.DataInputStream;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.NetworkInterface;

import java.net.Socket;

import java.net.SocketException;

import java.util.Enumeration;

import org.apache.http.conn.util.InetAddressUtils;

import android.annotation.SuppressLint;

import android.content.Context;

import android.content.SharedPreferences;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.widget.Toast;

public class NetTool {

private int SERVERPORT = 8888;

private String locAddress;//存儲本機ip,例:本地ip :192.168.1.

private Runtime run = Runtime.getRuntime();//獲取當前運行環境,來執行ping,相當于windows的cmd

private Process proc = null;

private String ping = "ping -c 1 -w 0.5 " ;//其中 -c 1為發送的次數,-w 表示發送后等待響應的時間

private int j;//存放ip最后一位地址 0-255

private Context ctx;//上下文

public NetTool(Context ctx){

this.ctx = ctx;

}

private Handler handler = new Handler(){

public void dispatchMessage(Message msg) {

switch (msg.what) {

case 222:// 服務器消息

break;

case 333:// 掃描完畢消息

Toast.makeText(ctx, "掃描到主機:"+((String)msg.obj).substring(6), Toast.LENGTH_LONG).show();

break;

case 444://掃描失敗

Toast.makeText(ctx, (String)msg.obj, Toast.LENGTH_LONG).show();

break;

}

}

};

//向serversocket發送消息

public String sendMsg(String ip,String msg) {

String res = null;

Socket socket = null;

try {

socket = new Socket(ip, SERVERPORT);

//向服務器發送消息

PrintWriter os = new PrintWriter(socket.getOutputStream());

os.println(msg);

os.flush();// 刷新輸出流,使Server馬上收到該字符串

//從服務器獲取返回消息

DataInputStream input = new DataInputStream(socket.getInputStream());

res = input.readUTF();

System.out.println("server 返回信息:" + res);

Message.obtain(handler, 222, res).sendToTarget();//發送服務器返回消息

} catch (Exception unknownHost) {

System.out.println("You are trying to connect to an unknown host!");

} finally {

// 4: Closing connection

try {

if (socket != null) {

socket.close();

}

} catch (IOException ioException) {

ioException.printStackTrace();

}

}

return res;

}

/**

* 掃描局域網內ip,找到對應服務器

*/

public void scan(){

locAddress = getLocAddrIndex();//獲取本地ip前綴

if(locAddress.equals("")){

Toast.makeText(ctx, "掃描失敗,請檢查wifi網絡", Toast.LENGTH_LONG).show();

return ;

}

for ( int i = 0; i < 256; i++) {//創建256個線程分別去ping

j = i ;

new Thread(new Runnable() {

public void run() {

String p = NetTool.this.ping + locAddress + NetTool.this.j ;

String current_ip = locAddress+ NetTool.this.j;

try {

proc = run.exec(p);

int result = proc.waitFor();

if (result == 0) {

System.out.println("連接成功" + current_ip);

// 向服務器發送驗證信息

String msg = sendMsg(current_ip,"scan"+getLocAddress()+" ( "+android.os.Build.MODEL+" ) ");

//如果驗證通過...

if (msg != null){

if (msg.contains("OK")){

System.out.println("服務器IP:" + msg.substring(8,msg.length()));

Message.obtain(handler, 333, msg.substring(2,msg.length())).sendToTarget();//返回掃描完畢消息

}

}

} else {

}

} catch (IOException e1) {

e1.printStackTrace();

} catch (InterruptedException e2) {

e2.printStackTrace();

} finally {

proc.destroy();

}

}

}).start();

}

}

//獲取本地ip地址

public String getLocAddress(){

String ipaddress = "";

try {

Enumeration en = NetworkInterface.getNetworkInterfaces();

// 遍歷所用的網絡接口

while (en.hasMoreElements()) {

NetworkInterface networks = en.nextElement();

// 得到每一個網絡接口綁定的所有ip

Enumeration address = networks.getInetAddresses();

// 遍歷每一個接口綁定的所有ip

while (address.hasMoreElements()) {

InetAddress ip = address.nextElement();

if (!ip.isLoopbackAddress()

&& InetAddressUtils.isIPv4Address(ip.getHostAddress())) {

ipaddress = ip.getHostAddress();

}

}

}

} catch (SocketException e) {

Log.e("", "獲取本地ip地址失敗");

e.printStackTrace();

}

System.out.println("本機IP:" + ipaddress);

return ipaddress;

}

//獲取IP前綴

public String getLocAddrIndex(){

String str = getLocAddress();

if(!str.equals("")){

return str.substring(0,str.lastIndexOf(".")+1);

}

return null;

}

//獲取本機設備名稱

public String getLocDeviceName() {

return android.os.Build.MODEL;

}

}

總結

以上是生活随笔為你收集整理的android ip地址扫描,Android:手机扫描局域网所有ip,并进行socket通讯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。