我必须发送 10 个数据包,每个数据包的超时时间为 3 秒。由于 Android ping 适用于 Linux ping 命令,因此我在我的应用程序中使用以下 ping 命令:
ping -c 10 -W 3 -s 32 www.google.com
它给出了以下响应,我在缓冲区中读取该响应并在控制台中打印,前缀为时间戳(月日期 hh:mm:ss:SSS):
01-27 16:49:08.733:icmp_seq=1 ttl=45 时间=138 毫秒
01-27 16:49:09.774:icmp_seq=2 ttl=45 时间=309 毫秒
01-27 16:49:10.585:icmp_seq=3 ttl=45 时间=116 毫秒
01-27 16:49:11.566:icmp_seq=4 ttl=45 时间=94.3 毫秒
01-27 16:49:12.567:icmp_seq=5 ttl=45 时间=92.5 毫秒
01-27 16:49:14.569:icmp_seq=7 ttl=45 时间=100 毫秒
01-27 16:49:15.570:icmp_seq=8 ttl=45 时间=97.1 毫秒
01-27 16:49:16.551:icmp_seq=9 ttl=45 时间=75.6 毫秒
01-27 16:49:17.552:icmp_seq=10 ttl=45 时间=76.2 毫秒
01-27 16:49:18.584:--- www.google.com ping 统计---
01-27 16:49:18.584:已发送 10 个数据包,已接收 9 个数据包,10% 数据包丢失,耗时 1099 毫秒
第 6 个数据包丢失了,但我没有收到任何超时事件/消息。超时时间为 3 秒 (-W 3),但第 7 个数据包在 3 秒超时之前仍然被收到。
有哪位专家能告诉我们 ping 超时 (-W) 在 Android/Linux 中是如何工作的吗?我应该使用其他参数来满足我的要求吗?
答案1
如果我理解正确的话,您应该使用 -w 选项(而不是 -W)。有人在这里解释过:https://stackoverflow.com/questions/17951182/ping-timeout-command-w-not-working-for-android
答案2
-w 表示 ping 命令的截止时间,与发送/接收的数据包数量无关。我必须等待(最长时间)3 秒才能收到每个数据包响应。如果 3 秒内没有响应,则应在此之后发送下一个数据包。
参考:下面提到 Windows 的 ping 命令行为
ping -n 4 -w 3000 www.abcd.com
使用 32 字节数据 Ping www.google.com [173.194.38.178]:
来自 173.194.38.178 的回复:字节=32 时间=61ms TTL=53
请求超时。
来自 173.194.38.178 的回复:字节=32 时间=68ms TTL=53
来自 173.194.38.178 的回复:字节=32 时间=61ms TTL=53
来自 173.194.38.178 的回复:字节=32 时间=66ms TTL=53