安卓调用ping命令
2018-04-08 本文已影响0人
小磊长江大
Java:
code
package com.example.ping;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
Button bt;
private static final String TAG = "PING_SHELL";`
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int ret = 0;
try {
// ping的返回比较耗时,不建议在此处执行ping命令,容易造成线程阻塞ANR。
String str = executeCmd("ping -c 1 -i 0.2 192.168.1.100");
ret = str.indexOf("100% packet loss");
Log.v(TAG, "str:" + str + "; ret:" + ret);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
private String executeCmd(final String cmd) throws IOException,
InterruptedException {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(cmd);
// 一定要调用waitFor,因为ping的返回不是即时的。
int wF = proc.waitFor();
Log.d(TAG, "wF is :" + wF);
BufferedReader bufferedreader = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
BufferedReader errorbuffer = new BufferedReader(new InputStreamReader(
proc.getErrorStream()));
String line = "";
StringBuilder sb = new StringBuilder(line);
while ((line = bufferedreader.readLine()) != null) {
Log.v(TAG, "line:" + line);
sb.append(line);
sb.append(';');
}
while ((line = errorbuffer.readLine()) != null) {
Log.v(TAG, "errorline:" + line);
sb.append(line);
sb.append(';');
}
Log.d(TAG, "sb is" + sb.toString());
return sb.toString();
}
}
java 调用在一些平台会得不到结果,打印:
socket: Permission denied
需确保你的内核编译config中:
CONFIG_ANDROID_PARANOID_NETWORK=n
C :
code
#include<stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
#define SLOGE printf
int isSystemSuccessful(pid_t status)
{
if(-1 == status || 127 == status){
SLOGE("system error!!");
return -1;
}else{
if(WIFEXITED(status)){
SLOGE("run shell script success, script exit code: %d\n",WEXITSTATUS(status));
return 0;
}else{
SLOGE("exit status = [%d]\n",WEXITSTATUS(status));
return -1;
}
}
}
int main(int argc, char **argv)
{
//system("ping -c 1 -i 0.2 192.168.1.100 > /data/local/tmp/ping.log");
pid_t status = system("ping -c 1 baidu.com");
if(isSystemSuccessful(status) != 0) {
SLOGE("configServer run system error!\n");
}
return 0;
}
makefile
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= pingtest.c
LOCAL_MODULE:= myping
LOCAL_CFLAGS := -Wall -Wno-unused-parameter
LOCAL_SHARED_LIBRARIES := libc libcutils
include $(BUILD_EXECUTABLE)