精华内容
下载资源
问答
  • Ping命令使用小技巧

    千次阅读 2021-07-31 05:45:06
    win7系统中,ping命令的使用可以说是网络故障的宿敌,在ping命令的操作下,各种网络故障都能够被轻松排查,一键重装系统 小编来讲解一下Ping命令使用小技巧吧。Ping命令使用时需要注意:成功地与另一台主机进行一次...

    win7系统中,ping命令的使用可以说是网络故障的宿敌,在ping命令的操作下,各种网络故障都能够被轻松排查,一键重装系统 小编来讲解一下Ping命令使用小技巧吧。

    Ping命令使用时需要注意:成功地与另一台主机进行一次或两次数windows7系统下载据报交换并不表示TCP/IP配置就是正确的,必须执行大量的本地主机与远程主机的数据包交换,才能确信TCP/IP的正确性。

    一、“.0”可以有条件省略

    大家常用“ping127.0.0.1”命令在本机上做回路测试,用来验证本机的TCP/IP协议簇是否被正确安装。win7系统下载但你发现了吗?使用“ping127.1”这个命令也能得到同样的测试结果,其实“ping127.1”和“ping127.0.0.1”这两条命令是一样的,都是在进行回路测试。

    Ping命令应用中IP地址的使用技巧。大家都知道,IP地址由32位二进制数字组成,为了方便大家记忆,将每8位二进制数字换算成十进制数字,因此就形成了容易记忆的由四部分十进制数字组成的IP地址(如127.0.0.1)。由于,Windows操作系统具有自动填充“.0”的功能,因此我就可将“127.0.0.1”变为“127.1”。

    但是,这个“.0”的省略是有条件限制的,并不能任意省略。在Ping命令的应用中,只能将在IP地址的最后一部分十进制数字前出现的一个或多个“.0”省略,如把“ping127.0.0.1”命令改写成“ping127.1”。

    如果这一个或多个“.0”没有紧挨着最后一部分的十进制数字,而是在其他位置,则这个“.0”不能省略,最新windows7系统如“ping202.0.96.1”就不能写成“ping202.96.1”。这是因为“ping202.96.1”返回的结果是“202.96.0.1”的应答信息,而不是“202.0.96.1”的应答信息。

    二、数字串代替IP地址

    在Ping命令中,还可以使用数字串代替IP地址,你相信吗?运行“ping3658906394”命令,你会看到“218.22.123.26”这个IP地址的返回信息。为什么会这样呢?其实,“3658906394”就是IP地址“218.22.123.26”的另一种表示形式。当然,也可按同样的方法Ping其他的IP地址。

    字符串是如何转换而来的呢?其实并不复杂,以“218.22.123.26”这个IP地址为例,IP地址转换成数字串方法如下:先将“218.22.123.26”转换为十六进制“DA.16.7B.1A”,然后去掉小数点后,变为“DA167B1A”,最后将这个十六进制数转换为十进制“3658906394”,那么“218.22.123.26”就变为“3658906394”了。其他IP地址转换为数字串也是使用同样的方法。

    提示:在某些局域网环境中,使用“Ping+数字串”命令可能会失败,出现提示信息“Unknownhost数字串”,这是因为该数字串被解析成主机名了,而不是IP地址。因此,掌握了上述技巧后,网管在进行网络测试或维护时,可以熟练运用“省略”方式,减轻Ping命令的字符输入量,提高工作效率。

    相关推荐:重装系统教程 。

    三、通过几个Ping命令判断网络故障

    局域网内电脑不能上网大致可分以下几个原因,系统的IP设置、网卡、路由器网关和线路故障。排除硬件及线路的故障问题,我们可以利用Ping命令来快速检测网络状况。

    首先,我们点击系统中开始里的运行,在运行栏中输入cmd命令,操作系统中的DOS窗口就会弹出,在这里我们可以直观和方便地输入各种DOS命令。接着,我们可以在DOS里输入Ping127.0.0.1,该地址是本地循环地址,如发现本地址无法Ping通,就表明本地机TCP/IP协议不能正常工作,此时应检查本机的操作系统安装设置。

    如果上面的操作成功,可Ping通的话,我们接下来可以输入IPConfig来查看本地的IP地址,然后Ping该IP(如192.168.0.100),通则表明网络适配器(网卡或MODEM)工作正常,不通则是网络适配器出现故障,可尝试更换网卡或驱动程序。然后Ping一台同网段计算机的IP,不通则表明网络线路出现故障;若网络中还包含有路由器,则应先Ping路由器在本网段端口的IP,不通则此段线路有问题,应检查网内交换机或网线故障。

    如果内网计算机能ping通则再Ping欣联的路由器(网关),(如192.168.0.1)如不通,则是路由器出现故障,可更换连接路由器的网线,或用网线将PC机直接连接至路由器,如能ping通,则应检查路由器至交换机的网线故障,如无法ping通,可尝试更换计算机再ping,若还不能ping通,则应检查路由器故障。

    最后,如果到路由器都正常,可再检测一个带DNS服务的网络,在上一步Ping通了目标计算机的IP地址后,仍无法连接到该机,则可Ping该机的网络名,比如Pingwww.ghost9.com或www.gwin7.com,正常情况下会出现该网址所指向的IP,这表明本机的DNS设置正确而且DNS服务器工作正常,反之就可能是其中之一出现了故障;同样也可通过Ping计算机名检测WINS解析的故障(WINS是将计算机名解析到IP地址的服务)。

    如果以上ping测试都没有问题,那么我们认为网络是正常的,如果出现某一应用无法正常连网,如网页打不开,则应检查相应的DNS服务器原因,如QQ、某一游戏等应用程序无法上网,则应检查相应的程序,或其服务器出现故障。

    以上几个步骤执行完毕后,就可轻易判断出到底是某个环节出现了故障问题,该重新设置的设置,该换硬件的换硬件。另外,如果想检测网络的连接情况,还可以在Ping的地址后面加上-t,这样可不断地进行Ping的连接,可反映出网络的连接是否有中断或者丢包的现象出现。 a51723308e514b522cb8ff8278cc73b4.png

    Ping命令使用小技巧的教程就讲解完了,其实在系统的使用中,ping命令确实是一个非常不错的功能,当网络出现故障的时候,使用ping命令,就可以很轻松地检验出哪里出现问题了,有类似网络故障的用户可以去试一试,谢谢收看,希望能帮助到大家。

    展开全文
  • centos下中断ping命令

    千次阅读 2016-06-18 00:04:38
    centos下中断ping命令 ctrl+c是可以的。不然也可以ctrl+z,然后kill %1 最好的方法还是 ping -c 3 192.168.1.1 ,-c 3表示ping 3次

    centos下中断ping命令

    ctrl+c是可以的。不然也可以ctrl+z,然后kill %1
    最好的方法还是 ping -c 3 192.168.1.1 ,-c 3表示ping 3次

    展开全文
  • ping命令详解】ping命令基础知识 ping命令使用方法发布时间:2017-04-12 18:21来源:互联网当前栏目:电脑技巧随着科技的发展,计算机的发展也非常快,如今已经进入大部分的家庭之中,成为人们日常生活中必不可少...

    【ping命令详解】ping命令基础知识 ping命令使用方法

    发布时间:2017-04-12 18:21

    来源:互联网

    当前栏目:电脑技巧

    随着科技的发展,计算机的发展也非常快,如今已经进入大部分的家庭之中,成为人们日常生活中必不可少的一个部分。当计算机出现一些小问题,我们就可以通过ping命令来查看电脑出现问题的原因,从而找到解决问题的办法。当然ping命令的使用也不是特别的复杂,别的不再过多的赘述,下面由小编为大家详细介绍ping命令详解和使用方法的相关信息

    ping命令的基础知识

    Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通情况和分析网络速度。ba6da8649b317a9d2e97572ba2255658.png

    Ping命令详解

    首先需要打开DOS命令界面,通过点击开始菜单中的“运行”选项,输入“cmd”,回车即可打开一个新的窗口,我们输入“ping/?”按回车,即可例出ping的一些参数。下面给大家讲解下每个参数意思和使用:6141c242b11be21ef253806c39c5d2df.png

    ping[-t][-a][-ncount][-llength][-f][-ittl][-vtos][-rcount][-scount][-jcomputer-list]|[-kcomputer-list][-wtimeout]destination-list

    -tPing指定的计算机直到中断。

    -a将地址解析为计算机名。

    -ncount发送count指定的ECHO数据包数。默认值为4。

    -llength发送包含由length指定的数据量的ECHO数据包。默认为32字节;最大值是65,527。

    -f在数据包中发送"不要分段"标志。数据包就不会被路由上的网关分段。

    -ittl将"生存时间"字段设置为ttl指定的值。

    -vtos将"服务类型"字段设置为tos指定的值。

    -rcount在"记录路由"字段中记录传出和返回数据包的路由。count可以指定最少1台,最多9台计算机。20160820_3321c9e9dfe412364363txagfEabwafw180.jpg

    -scount指定count指定的跃点数的时间戳。

    -jcomputer-list利用computer-list指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP允许的最大数量为9。

    -kcomputer-list利用computer-list指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP允许的最大数量为9。

    -wtimeout指定超时间隔,单位为毫秒。

    destination-list指定要ping的远程计算机。

    ping命令的使用方法

    ping命令可以在命令提示符窗口内使用,不过一般都是使用ping命令来测试网络连通。

    使用Ping检查连通性有五个步骤:

    使用ipconfig/all观察本地网络设置是否正确;

    Ping127.0.0.1,127.0.0.1回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好;

    Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;20160820_d1e45b5508b84f58abd7M98oxvEb3vOe181.png

    Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)

    展开全文
  • android中的ping命令使用

    千次阅读 2021-06-18 11:52:23
    有时我们需要知道设备的网络好不好,光看手机上的信号格数是不准确的,比如在广州南站,人那么多,如果带宽不够的话,虽然你看着信号是满格的,但是网速也会很慢,所以不能光看信号强度,还是得通过ping命令来看网速...

    前言

    在做Android开发时,有时我们需要知道设备的网络好不好,光看手机上的信号格数是不准确的,比如在广州南站,人那么多,如果带宽不够的话,虽然你看着信号是满格的,但是网速也会很慢,有些地方,人少,信号也满格,但是网速也慢,所以不能光看信号强度,还是得通过ping命令来看网速比较可靠。

    在Android的实际开发中,我们公司开发了音视频通讯App,安装在了客户的设备上,客户说,哎,怎么看不到视频啊,你这App不行啊,每次遇到这种问题我们就会说,是你的网络不行啊。啊哈,很搞笑,一有问题我们就会说是客户的网络不好导致的,但是每次你这么说的话也不太好啊,你要拿出证据来啊,客户说他信号明明是满格的呀!所以解决方案就是在App上面增加ping的功能,这样看网络好不好就比较有理有据了。当然,我们也可以远程ping,就是通过网络给客户的app发命令,app收到命令后就开始ping,ping完之后把结果通过网络再传到我们这边的app上,这样我们就可以远程查看客户的网络情况了。

    ping的含义

    来自百度百科,ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序 。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。

    ping用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。

    Windows中的ping命令

    Windows中的ping命令可以通过 -l 设置发送数据包的大小,通过 -w 可以设置超时时间,示例如下:
    在这里插入图片描述
    如上图,-l 128设置了发送的数据包为128 bytes,不设置的话默认是32 bytes,-w 4000设置了超时时间为4000毫秒(不写的话,默认好像超时也是4000毫秒),Windows默认是ping四次,所以出现了4行的超时(Request timed out.),ping返回结果分析如下:

    • Pinging 192.168.124.88 with 128 bytes of data: 这说明正在ping 192.168.124.88,数据包大小为128 bytes
    • Request timed out. 这说明ping超时了都没有收到192.168.124.88主机的回应。
    • Ping statistics for 192.168.124.88: 说明这是ping 192.168.124.88的结果分析。
    • Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
      - Sent = 4,说明总共发送了4个数据包
      - Received = 0,说明所有发出去的数据包中收到回应的个数为0个
      - Lost = 4,说明发送的数据包中有4个包丢失了(即没有收到回应)
      - 100% loss 说明所有发送的数据包中100%的数据包都丢失了

    正常能ping通的效果图如下:
    在这里插入图片描述
    这里可以看到,ping百度的域名,它解析到百度的ip为220.181.38.148,非常的快,发送128 bytes只需要37ms即可收到响应。返回结果分析如下:

    • Pinging baidu.com[220.181.38.148] with 128 bytes of data: 这说明正在ping baidu.com[220.181.38.148] ,数据包大小为128 bytes
    • Reply from 220.181.38.148: bytes=128 time=37ms TTL=50
      - Reply from 220.181.38.148: 这说明发送到220.181.38.148的数据包收到回应了
      - bytes=128,说明发送的数据包大小为128 bytes
      - time=37ms,说明数据包从发送出去到接收到回应,花了37毫秒时间。网络好不好就看这个时间了,像37毫秒就是网络非常好的了,在公司测试发现100毫秒上下也是OK的,数字越小越好,具体数字多大就会卡呢,自己试罢,反正如果你发现卡的时候,就看看这个数字是多少,慢慢的你就知道什么数字是好的,什么数字是差的了。
      - TTL=50,TTL(Time To Live,生存周期):每经过一次路由该值自减1,直至减到0时该IP包会被丢弃。通过这样的设置可以在路由遇到死循环时,避免IP包在环内不停转发,但不能达到目的地。
    • Approximate round trip times in milli-seconds: 往返行程的估计时间
    • Minimum = 37ms, Maximum = 38ms, Average = 37ms
      - 最短 = 37ms,即使用时间最短的那个数据包发送接收的使用时间
      - 最长 = 38ms,即使用时间最长的那个数据包发送接收的使用时间
      - 平均 = 37ms,即所有的数据包平均的发送和接收的使用时间

    因为默认只ping四次,所以如果需要一直ping的话可以通过加 -t 参数,示例如下:
    在这里插入图片描述
    这时它就会一直ping,直到我们按Ctrl + C才会停止。

    关于TTL,一般用默认值就行,为了方便理解,我们修改一下这个参数,使用 -i 可以修改,比如改成5次,然后ping baidu,看经过5次路由能否达到百度,如下:
    在这里插入图片描述
    啊哈,竟然会超时出现,我网络好的很,哎,也不追究这个为什么会出现超时了,反正网上是这么说的:TTL数值每经过一次路由就会减1,如果到0时还没有达到目标主机,就会返回失败了,返回的内容的就是上面的“Reply from 219.158.8.85: TTL expired in transit.”,中文含义为“来自 219.158.8.85的回复:TTL在传输过程中过期了。”

    Android中的ping命令

    在命令行中进入shell:

    adb shell
    

    执行效果如下:
    在这里插入图片描述

    这时,我们就可以输入ping命令执行了,如下:
    在这里插入图片描述
    和windows不同,windows默认只ping4次,而linux默认会不停地ping,直到我们按下Ctrl + C才停止。

    在我的Android项目需求中,不能一直ping,只需要ping一段时间即可,通过 -c 命令可以指定ping的次数,比如设置成只ping4次,如下:
    在这里插入图片描述
    如上图,可以看到,Linux的ping返回结果和Windows的差不多,相同的我就不重复解释了,只说不同点,如下:

    • PING baidu.com (220.181.38.148) 56(84) bytes of data. 这里的56(84),56指的是数据包的大小为56bytes,84是什么我就不知道了,似乎括号里的这个数值和不带括号的总是相差28。下面一行我们看到有64 bytes,和56 bytes相差8。
    • icmp_seq=1 ping序列,从1开始,干嘛用的?我也不知道,在ping的时候你可以通过这个值了解到这是发送的第几个数据包了。
    • 4 packets transmitted, 4 received, 0% packet loss, time 3011ms
      - 4 packets transmitted,说明传输了4个包
      - time 3011ms 这是个什么时间?我也不知道,懒的去查了,开始我以为是整个ping过程所花的总时间,后来打开计时器看发现并不是。
    • rtt min/avg/max/mdev = 40.851/53.571/58.797/7.373 ms,rtt是舍意思?我也不知道,懒得查了,后面的,min是最短,avg是平均,max是最长,mdev?,我也不知道,懒得查。这里的最短、平均、最长和Widnows的是一样的含义,不多解释了。

    在网络不好时,会发现ping命令一直没有输出内容,如下:
    在这里插入图片描述
    于是就想说,设置个超时时间吧,通过-W可以设置超时时间,这里我设置了超时为1000,我不知道这个1000是个什么单位,是毫秒啊,还是秒?测试发现在我网络不通的时候一直不结束,有可能这个单位是秒,所以超时时间就很长,那我就当它单位是秒吧,设置为10再试一下,发现还是没结果,如下:
    在这里插入图片描述
    那我设置ping的次数为4次,再试一下,如下:
    在这里插入图片描述
    我使用计时器看了一下,大概13秒结束返回结果,搞不懂这个-W设置的超时是个什么原理,跟Windows不一样啊,Windows是每发送一个数据包,如果超时了就会打印一行Request timed out,按照这个逻辑的话上面应该打印4行Request timed out,而且总时间应该是40秒,因为超时是10秒,ping 4次,如果4次都超时则为40秒,这才是正常行为,但是不知道为什么Android上这么奇怪,是因为Android修改过这个Linux底层了吗?带着这个疑问,我打开了我华为云上的Linux主机,发现效果是一样的,如下:
    在这里插入图片描述
    这说明Linux的超时设置就是有问题的!完全没有Windows的那个效果。这里有一篇文章在说为什么Linux ping超时了没有回显消息:https://blog.csdn.net/wj31932/article/details/111315405,文章大长了,我也懒得去慢慢看,这个超时参数不管用那我只能不用它了。

    那在做Android开发时,如果网络不好ping命令一直不返回也不行啊,怎么结束ping操作啊?,我发现把ping的那个线程中断也不管用。

    只输入ping就按回车,可以看到ping命令的所有参数,如下:
    在这里插入图片描述
    如上图,有一个参数为:-w deadline,注,这是小写的w,deadline中文含义为“最后期限”,其作用就是设置整个ping过程的时间,这个功能非常符合我的项目需求,我就是想要设置ping多久,比如我想设置ping30秒,我不管你30秒ping了多少次,我也不管你超时时间是多少,我也不管你网络好不好,反正30秒之后你一定要给我结束,使用如下:
    在这里插入图片描述
    我开计时器了,确实是30秒之后就结束了。

    总结

    ping命令的参数很多,但是真正在用的时候需要的参数也就一两个,所以掌握这一两个就够了。Windows中的ping用-l和-t参数就够了,Linux中的ping用-s和-w就够了,超时时间一般是不用设置的,用默认的就好了。

    1. Windows ping简单使用:ping -l 128 -t baidu.com
      - l 设置数据包大小为128 bytes
      - t 设置一直不停地ping
      - 示例如下:
      在这里插入图片描述

    2. Linux ping简单使用:ping -s 120 -w 20 baidu.com
      - s 设置数据包大小为120 bytes,实际发送数据包时是128bytes,据说是会包含一些头信息什么的需要额外的8bytes,据我的实验,在Android手机中,默认是1秒ping一次,包含超时时间在里面,比如ping 20秒,不管网络好与不好,20秒后,看统计信息会显示发送的刚好是20个包。
      - w设置总的ping时间为20秒
      - 示例如下:
      在这里插入图片描述

    3. 查看ping参数说明

      • Windows直接输入ping即可,如下:
        在这里插入图片描述
      • Linux也是直接输入ping,如下:
        在这里插入图片描述
        如果是在Linux电脑(在Android系统上不行),还可以使用man ping查看ping命令的详细使用手册,如下:
        在这里插入图片描述
        在这里插入图片描述
        这个手册非常详细,从这里可以看到-w和-W的单位为秒,百度里找到的文章大多数说是毫秒,真是一个个都是转载别人的,一个错个个错,所以,尽量找官网文档看,比较准确。

    Android中使用代码完成Ping功能

    重点:Android使用此函数来执行ping命令:Runtime.getRuntime().exec(“ping -s 56 -w 30 192.168.1.8”),这个函数执行之后会返回一个Process进程对象,通过读取这个进程的两个输入流即可获取到ping的结果,需要注意的是,系统是有可能交替往这两个流里面写入数据的,所以我们需要开两个线程同时读取这两个流(百度的文章里全是一个线程进行读取的),这里使用到了线程的合并功能(join()函数),通过join()函数可以实现让两个线程先执行完,所以这个示例中完美的展示了join()函数的使用,大家可以深刻体会到该函数的作用是怎样的,准确的说,join()函数并不是线程合并函数,而是一个等待函数,比如在A线程里调用了B线程的join()函数,则A线程就等着不动了,等到B线程执行结束了A线程才继续接着往下执行。

    先上一个效果图:
    在这里插入图片描述

    这里设置ping的ip为百度的ip,ping 5秒钟,数据包大小为64字节,点击Start Ping按钮,效果如下:
    在这里插入图片描述
    代码如下:
    1、首先开启ViewBinding功能,在build.gradle中配置,如下:

    android {
        compileSdkVersion 30
        buildToolsVersion "30.0.3"
    
        buildFeatures {
            viewBinding true
        }
    }
    

    2、界面布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        tools:context=".MainActivity">
    
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="16dp"
                android:text="Ping IP: "
                tools:ignore="SpUsage" />
    
            <EditText
                android:id="@+id/etIp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="16dp"
                android:inputType="phone"
                android:text="39.156.69.79"
                tools:ignore="Autofill,SpUsage" />
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="16dp"
                android:text="Ping多久(单位为秒): "
                tools:ignore="SpUsage" />
    
            <EditText
                android:id="@+id/etTime"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="16dp"
                android:inputType="number"
                android:text="5"
                tools:ignore="Autofill,SpUsage" />
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="16dp"
                android:text="数据包大小(单位为字节): "
                tools:ignore="SpUsage" />
    
            <EditText
                android:id="@+id/etSize"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="16dp"
                android:inputType="number"
                android:text="64"
                tools:ignore="Autofill,SpUsage" />
    
        </LinearLayout>
    
        <Button
            android:gravity="center"
            android:id="@+id/btnStartPing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Start Ping"
            android:textAllCaps="false"
            android:textColor="@android:color/white"
            android:textSize="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            tools:ignore="SpUsage" />
    
    </LinearLayout>
    

    3、代码:

    class MainActivity : AppCompatActivity() {
    
        private lateinit var binding: ActivityMainBinding
        private lateinit var mAdapter: MyAdapter
        private val lines = ArrayList<String>()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
    
            mAdapter = MyAdapter()
            binding.recyclerView.layoutManager = LinearLayoutManager(this)
            binding.recyclerView.adapter = mAdapter
            binding.btnStartPing.setOnClickListener {
                thread { ping() }
            }
        }
    
        private fun ping() {
            val ip = binding.etIp.text.trim().toString()
            val sizeStr = binding.etSize.text.trim().toString()
            val time = binding.etTime.text.trim().toString()
            if (ip.isBlank()) {
                runOnUiThread { Toast.makeText(this, "请输入IP", Toast.LENGTH_SHORT).show() }
                return
            }
            if (sizeStr.isBlank()) {
                runOnUiThread { Toast.makeText(this, "请输入数据包大小", Toast.LENGTH_SHORT).show() }
                return
            }
            if (time.isBlank()) {
                runOnUiThread { Toast.makeText(this, "请输入要ping多久", Toast.LENGTH_SHORT).show() }
                return
            }
    
            if (!isValidIpAddress(ip)) {
                runOnUiThread {
                    AlertDialog.Builder(this)
                        .setTitle("提示")
                        .setMessage("您输入的IP地址格式有误,请修正!")
                        .show()
                }
                return
            }
    
            runOnUiThread {
                binding.btnStartPing.isEnabled = false
                lines.clear()
                addData("Ping开始")
            }
    
            val size = sizeStr.toInt() - 8
            val command = "ping -s $size -w $time $ip"
    
            // 注:正常ping数据和错误ping数据可能会交替输出,所以需要开两个线程同时读取
            val process = Runtime.getRuntime().exec(command)
            val inputStreamThread = readData(process.inputStream) // 读取正常ping数据
            val errorStreamThread = readData(process.errorStream) // 读取错误ping数据
    
            // 等待两个读取线程结束
            inputStreamThread.join()
            errorStreamThread.join()
    
            runOnUiThread {
                addData("Ping结束")
                binding.btnStartPing.isEnabled = true
            }
        }
    
        private fun readData(inputStream: InputStream?) = thread {
            try {
                BufferedReader(InputStreamReader(inputStream)).use { reader ->
                    var line: String?
                    while (reader.readLine().also { line = it } != null) {
                        val lineTemp = line!!
                        runOnUiThread { addData(lineTemp) } // 这里切换到了UI线程,子线程继续执行时可以已经把line对象又赋值为null了,所以使用了lineTemp来预防值被重新赋值
                    }
                }
            } catch (e: Exception) {
                runOnUiThread { addData("出现异常:${e.javaClass.simpleName}: ${e.message}") }
            }
        }
    
        private fun addData(data: String) {
            lines.add(data)
            refreshListView()
        }
    
        private fun refreshListView() {
            mAdapter.notifyDataSetChanged()
            binding.recyclerView.scrollToPosition(lines.size - 1)
        }
    
        /**
         * 验证给定的ip地址是否有效
         * @param ip
         */
        private fun isValidIpAddress(ip: String?): Boolean {
            if (ip.isNullOrBlank()) return false
            val regex = "(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})(\\.(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})){3}"
            val pattern = Pattern.compile(regex)
            val matcher = pattern.matcher(ip)
            return matcher.matches()
        }
    
        internal inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
            var textView: TextView = itemView.findViewById(android.R.id.text1) as TextView
        }
    
        internal inner class MyAdapter : RecyclerView.Adapter<MyViewHolder>() {
    
            override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
                return MyViewHolder(View.inflate(parent.context, android.R.layout.simple_list_item_1,null))
            }
    
            override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
                holder.textView.text = lines[position]
            }
    
            override fun getItemCount(): Int {
                return lines.size
            }
        }
    }
    

    也可从码云中下载完整代码:https://gitee.com/daizhufei/android-ping

    展开全文
  • 常用ping命令详解

    2021-05-13 23:42:49
    下面本篇文章就来给大家介绍一些常用的ping命令ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此测试网络。ping的...
  • linux怎么停止ping命令

    2021-12-17 20:27:50
    linux停止ping命令的方法:1、使用“CTRL+c”或“CTRL+z”方式退出;2、设置选项方式,使得ping命令执行若干次包就终止。 本文操作环境:linux5.9.8系统,Dell G3电脑。 linux怎么停止ping命令? 停止linux下...
  • 一、linux中的ping命令的详细解释1.命令格式:ping [参数] [主机名或ip地址]2.命令功能:ping命令用于:确定网络和各外部主机的状态;跟踪和隔离硬件和软件问题;测 试、评估和管理网络。如果主机正在运行...
  • 摘要:命令化引肝硬脉高压的原因一般起门不包括。血肌,数中数表示时中尿蛋白(,热3突发畏寒、发,中性,菌落计数,痛与角压有双肋脊,尿培中段菌生养有埃希清洁大肠长,能诊最可本例断是,性患者岁女。个参腺术后最...
  • ping命令的用法

    2021-07-27 05:32:57
    ping命令的用法?你对这个了解多少呢?下面就由小编为你简单的介绍一下吧!ping命令的用法:主要功能是验证与远程计算机的连接。该命令只有在安装了 TCP/IP 协议后才可以使用。命令格式如下:复制代码代码如下:ping [-t]...
  • 我正在尝试编写一个脚本,该脚本列出局域网中的所有主机(其中约有20个),并在每个主机旁边写入ping状态。我有DHCP租约文件,所以我有所有IP(例如10.0.0.1、10.0.0.2等),我需要的只是每个主机的ping状态。因此,我的...
  • 华为交换机ping命令详解

    千次阅读 2020-12-20 16:07:07
    华为交换机ping命令详解1、Ping简介Ping是排除设备访问故障的常见方法。它使用Internet控制消息协议ICMP(Internet Control Message Protocol)确定以下内容:远程设备是否处于可访问状态;访问远程设备时是否丢失报文...
  • Ping 命令详解

    2021-03-04 10:08:20
    简述: ICMP协议是“Internet Control Message Protocol”(因特网控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。...ping命令通常用来作为网络可用性的检查。p
  • Ping命令详解

    2021-02-01 18:05:23
    Ping 是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中 Ping 是一个十分好用的 TCP/IP 工具。它主要的功能是用来检测网络的连通情况和分析网络速度。Ping 有好的善的一面也有恶的一面。先说一下善的一面吧。...
  • ping命令详解

    千次阅读 2019-04-09 11:32:16
    ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一下。...
  • 常用网络命令:ping命令的使用

    千次阅读 2021-09-04 18:11:26
    Ping命令的使用 一、Ping命令的基本概念 ping是一个十分基本但又十分重要的TCP/IP网络工具。它的作用主要为: (1)通常用来检测网络的连通情况和测试网络速度; (2)也可以根据域名得到相应主机的IP地址; (3)...
  • ping命令ping是个使用频率极高的实用程序,主要用于确定网络的连通性。这对确定网络是否正确连接,以及网络连接的状况十分有用。简单的说,ping就是一个测试程序,如果ping运行正确,大体上就可以排除网络访问层、...
  • ping命令详解 ping不通处理方法

    千次阅读 2021-11-19 18:21:07
    看到网上有很多介绍ping命令和不通时解决方法的文档,感觉错误的说法不少,再者没有从网络层的分析,所以把自己积累的一些写出,供大家参考,指正。 本文介绍cmd下ping命令的作用,简单过程,ping的发包原理和流程...
  • Centos下怎样终止ping退出ping命令界面? 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!
  • 当然ping命令的使用也不是特别的复杂,别的不再过多的赘述,下面由小编为大家详细介绍ping命令详解和使用方法的相关信息ping命令的基础知识Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,...
  • ping命令

    2021-03-24 09:50:49
    在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为: (1)用来检测网络的连通情况和分析网络速度;(2)根据域名得到服务器IP;(3)根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量...
  • Windows中的ping命令

    千次阅读 2020-05-06 14:50:11
    在网络中 ping 是一个十分强大的 TCP/IP 工具,它的作用主要为: 1、时间属性用来检测网络的连通情况和分析网络速度 ,时间值越小说明你连接这个地址速度越快。 2、根据域名得到服务器 IP, Ping www.baidu.com...
  • 停止linux下正在执行的ping命令

    千次阅读 2019-12-10 10:08:52
    CTRL+c或CTRL+z方式退出 也可以设置选项方式,使得ping命令执行若干次包就终止。ping 192.168.34.44 -c 4,此时ping命令将执行4次
  • ping命令的常见用法

    2020-12-24 20:50:52
    它是用来检查网络是否通畅或者网络连接速度的命令 ping 原理 ICMP协议是“Internet Control Message Ptotocol”(因特网控制消息协议)的缩写,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制...
  • 说明:初学linux时候,ping了下 百度网址 发现停止不下来了,查了下资料才查到如何停止ping命令 停止ping命令方法: ctrl+Z 就欧了
  • Ping大包命令格式详解如下:ping全称Packet Internet Grope—英特网包探索器,是一个Windows自带可执行命令,主要用来检测网络是否通畅或者网络链接速度的命令,利用网络上的机器IP地址的唯一性,给目标地址发送一个...
  • ping命令的时间间隔是多少?

    千次阅读 2020-12-29 06:42:50
    如果您是希望做一个Ping时间间隔的脚本的话,建议您去更专业的技术论坛上去找一下相应版块。Microsoft TechNet :就我个人的理解和知识,您所说的32bytes之间的时间间隔应该是248ms。两次Ping间延迟:规定两次Ping...
  • 如何停止linux下正在执行的ping命令

    万次阅读 多人点赞 2018-05-01 09:30:47
    在Linux系统中,当能ping通一个主机时,此时ping命令会一直执行,要想终止,可采用CTRL+c或CTRL+z方式退出。也可以设置选项方式,使得ping命令执行若干次包就终止。ping 192.168.34.44 -c 4,此时ping命令将执行4次...
  • Ping命令

    2020-12-31 11:07:49
    Ping命令 linux ping 命令解析 不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP(Internet控制消息协议)工作;ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性...
  • Linux中ping命令介绍

    万次阅读 2017-04-09 09:22:14
    Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”、不能打开网页时会说“你先ping网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,724
精华内容 13,089
关键字:

中断ping命令