安卓调用ping命令

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)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容