2024年最全android中的ping命令使用(1),2024年最新安卓开发面经

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题全套解析,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,下面只是以图片的形式给大家展示一部分。

image

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在这里插入图片描述

和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

- 示例如下:

在这里插入图片描述

  1. Linux ping简单使用:ping -s 120 -w 20 baidu.com

- s 设置数据包大小为120 bytes,实际发送数据包时是128bytes,据说是会包含一些头信息什么的需要额外的8bytes,据我的实验,在Android手机中,默认是1秒ping一次,包含超时时间在里面,比如ping 20秒,不管网络好与不好,20秒后,看统计信息会显示发送的刚好是20个包。

- w设置总的ping时间为20秒

- 示例如下:

在这里插入图片描述

  1. 查看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

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

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” />

<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” />

3、代码:

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

private lateinit var mAdapter: MyAdapter

private val lines = ArrayList()

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

}

总结

可以看出,笔者的工作学习模式便是由以下 「六个要点」 组成:

❝ 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法❞

希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。

下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。

**如:我需要学习 **Flutter的知识。(大家可以参考我的学习方法)

  • Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)

  • Flutter进阶学习全套手册

  • Flutter进阶学习全套视频

大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

(大家可以参考我的学习方法)

  • Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)

[外链图片转存中…(img-St29puTg-1715880747285)]

  • Flutter进阶学习全套手册

[外链图片转存中…(img-Cw5eC3z6-1715880747286)]

  • Flutter进阶学习全套视频

[外链图片转存中…(img-FwaThZGI-1715880747286)]

大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值