Android/Linux Ping 在数据包超时之前发送另一个数据包

Android/Linux Ping 在数据包超时之前发送另一个数据包

我必须发送 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

相关内容