Android网络测试--Ping命令

在开发Ping过程中,由一个小白到懵懂开发,开发出功能后总结了一下Android开发Ping时的应该要注意的。

先不说别的上代码:(要是有兴趣就往下看看Ping的参数设置,我也只懂了几个参数设置)

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new NetPing().execute();
    }

    /**
     * ping 语句传值拼接
     */
    public void Ping() {
        StringBuilder buffer = new StringBuilder();
        String result = ""; // 结果集
        Process ping;
        try {
            /*常用格式
              ping 网址 -n 次数 -l 大小 -w 超时时间(毫秒) -t 不停运行
              ping www.baidu.com -n 3 -l 32 -w 60 
              但是实测这样并不行,于是找了其他的方法
              ping -c 3 -s 32 www.baibu.com
            */
            // ping = Runtime.getRuntime().exec("ping www.baidu.com -n 3 -l 32 ");
            ping = Runtime.getRuntime().exec(
                   "ping -c " + count + " -s " + sByte + " " + url);
            int status = ping.waitFor(); // 状态

            InputStream input = ping.getInputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(input));

            String line = "";   // 长度
            while ((line = in.readLine()) != null) {
                buffer.append(line).append("\n");
            }
            // 输出结果
            System.out.println("============" + buffer.toString());

            if (status == 0) {
                result = buffer.toString();
            } else {
                result = "test error";
            }
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

    @SuppressLint({"WrongThread", "StaticFieldLeak"})
    private class NetPing extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... params) {
            Ping();
            return null;
        }
    }
}

我再开发中用到的都在里面了。

下面是ping语言的参数设置:(cmd 输入ping 就会有ping的参数使用介绍)

C:\Users\xu>ping

用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
            [-r count] [-s count] [[-j host-list] | [-k host-list]]
            [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
            [-4] [-6] target_name

选项:
    -t             Ping 指定的主机,直到停止。
                   若要查看统计信息并继续操作,请键入 Ctrl+Break;
                   若要停止,请键入 Ctrl+C。
    -a             将地址解析为主机名。
    -n count       要发送的回显请求数。
    -l size        发送缓冲区大小。
    -f             在数据包中设置“不分段”标记(仅适用于 IPv4)。
    -i TTL         生存时间。
    -v TOS         服务类型(仅适用于 IPv4。该设置已被弃用,
                   对 IP 标头中的服务类型字段没有任何
                   影响)。
    -r count       记录计数跃点的路由(仅适用于 IPv4)。
    -s count       计数跃点的时间戳(仅适用于 IPv4)。
    -j host-list   与主机列表一起使用的松散源路由(仅适用于 IPv4)。
    -k host-list    与主机列表一起使用的严格源路由(仅适用于 IPv4)。
    -w timeout     等待每次回复的超时时间(毫秒)。
    -R             同样使用路由标头测试反向路由(仅适用于 IPv6)。
                   根据 RFC 5095,已弃用此路由标头。
                   如果使用此标头,某些系统可能丢弃
                   回显请求。
    -S srcaddr     要使用的源地址。
    -c compartment 路由隔离舱标识符。
    -p             Ping Hyper-V 网络虚拟化提供程序地址。
    -4             强制使用 IPv4。
    -6             强制使用 IPv6。

这里Android 开发常用的应该就是 -n 次数 -l 大小 -w 超时时间 ;其他的我在测试时也没测出什么所以然来,所以有兴趣的同志可以一起讨论一下:下面是我做的小测试

C:\Users\xu>ping www.baidu.com -n 3 -l 64

正在 Ping www.a.shifen.com [61.135.185.32] 具有 64 字节的数据:
来自 61.135.185.32 的回复: 字节=64 时间=15ms TTL=54
来自 61.135.185.32 的回复: 字节=64 时间=19ms TTL=54
来自 61.135.185.32 的回复: 字节=64 时间=18ms TTL=54

61.135.185.32 的 Ping 统计信息:
    数据包: 已发送 = 3,已接收 = 3,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 15ms,最长 = 19ms,平均 = 17ms
C:\Users\xu>ping www.baidu.com -n 3 -l 64 -r 5

正在 Ping www.a.shifen.com [61.135.185.32] 具有 64 字节的数据:
请求超时。
请求超时。
请求超时。

61.135.185.32 的 Ping 统计信息:
    数据包: 已发送 = 3,已接收 = 0,丢失 = 3 (100% 丢失)
C:\Users\xu>ping www.baidu.com -n 3 -l 64 -i 2

正在 Ping www.baidu.com [61.135.185.32] 具有 64 字节的数据:
来自 192.168.99.1 的回复: TTL 传输中过期。
来自 192.168.99.1 的回复: TTL 传输中过期。
来自 192.168.99.1 的回复: TTL 传输中过期。

61.135.185.32 的 Ping 统计信息:
    数据包: 已发送 = 3,已接收 = 3,丢失 = 0 (0% 丢失)

参数详解

-t:持续ping后接的主机地址,直到ctrl+c来结束命令

-a:将地址解析为主机名

-n:后接发送的echo询问包的数目

-l:后接length,发送包含由length指定的数据量的echo数据包

-i:后接ttl值,将生存时间设置为ttl指定的值

-v:将服务类型字段设置为“tos”指定的值

-r:在“记录路由”字段中记录传出和返回数据包的路由

-s:指定“count”指定的跃点数的时间戳

-j:经过由computer-list指定的计算机列表的路由报文

-w:以毫秒为单位指定超时间隔

-4/6:强制使用ipv4/ipv6协议,后接ipv4/6地址

那么这个命令可以用来做什么呢?主要是检测网络连通性

在用ping命令之前最好用ipconfig /all命令来看一下本地网络设置

1. ping 127.0.0.1;127.0.0.1是一个回送地址,ping回送地址是为了检测本地的TCP/IP协议有没有设置好。

2. ping +本机ip;用于检测本机的IP地址是否设置有误

3. ping+本网网关;为了检测硬件设备是否有问题

4. ping+远程IP地址;用于检测本机或者本网与外网的连接是否正常

参考文献:https://blog.csdn.net/bbc955625132551/article/details/69665160

参考文献:Android:Ping命令测试网络

 

下一篇:Android网络测试--Traceroute

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值