美文网首页
安卓调用ping命令

安卓调用ping命令

作者: 小磊长江大 | 来源:发表于2018-04-08 19:44 被阅读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)

相关文章

网友评论

      本文标题:安卓调用ping命令

      本文链接:https://www.haomeiwen.com/subject/chmmhftx.html