哪里可以从Android设备读取WiFi丢包计数器?

时间:2012-12-04 14:25:44

标签: android networking

我正在寻找从WiFi网络读取丢包计数器的方法。

它应该超过 adb shell Java C(NDK)或您的方式

Android没有扎根。

我有一个接入点,我使用Dummynet服务配置丢包2%。

我从PC使用wget命令并从本地服务器下载50 Mb文件(LAN的Band Width应该是'100Mb)。我看到在丢包后配置Band Width从100Mb减少到3Mb,这意味着一切正常。

到目前为止一切顺利,

我的设备(Android)通过WiFi连接到上述AP。

我尝试下载相同的50 Mb文件,下载速率是3M,但我没有看到任何错误或重传计数器上升。

我使用adb shell CLI并输入:sys/class/net/eth0/statistics我看到了:

-r--r--r-- root     root         4096 2012-12-04 15:42 rx_packets
-r--r--r-- root     root         4096 2012-12-04 15:42 tx_packets
-r--r--r-- root     root         4096 2012-12-04 15:41 rx_bytes
-r--r--r-- root     root         4096 2012-12-04 15:41 tx_bytes
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 tx_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_dropped
-r--r--r-- root     root         4096 2012-12-04 15:43 tx_dropped
-r--r--r-- root     root         4096 2012-12-04 15:43 multicast
-r--r--r-- root     root         4096 2012-12-04 15:43 collisions
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_length_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_over_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_crc_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_frame_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_fifo_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_missed_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_aborted_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_carrier_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_fifo_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_heartbeat_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_window_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_compressed
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_compressed

所以我运行cat *并获得上述所有文件,其中0值除了4:

tx/rx_packets/bytes处于活动状态,这意味着我使用了write interface:

cat rx_packets
9106

如果有任何其他方法来检测数据包丢失或以编程方式获取它将非常感激

2 个答案:

答案 0 :(得分:3)

除非我误解了你的要求。如果您连接到与移动设备相同的网络,则可以使用wireshark。

或者你可以做一个tcpdump,然后通过wireshark进行分析,以便丢包。

以下是一些可能对您有所帮助的链接。

http://dennismillerdev.wordpress.com/2011/02/03/debug-network-activity-in-android-using-wireshark/ http://mobile.tutsplus.com/tutorials/android/analyzing-android-network-traffic/ Capturing mobile phone traffic on wireshark

如果您只是尝试进行通用连接测试。您可以尝试简单地向服务器发送一系列UDP数据包,以回应相同的数据包。有一个单独的线程同时运行,试图从服务器接收这些数据包。如果要进行其他测量,请记录时间戳,但如果返回的数据包少于发送的数据包,则可以知道丢失了多少数据包。如果为数据包提供包含id的1字节有效负载。 (即:发送20个ID为1-20的数据包)然后当您从服务器收到数据包时,您可以检查有效负载并查看哪些数据包丢失和/或不按顺序。

除此之外,您在没有手机根电源的情况下受到限制。您可以使用TrafficStats获取发送的数据包数getTotalRxPackets()getTotalTxPackets()以获取发送/接收的总数据包。或者,如果您使用更高级别的API,您甚至可以获得每个应用程序的UDP数据包数量。因此,您可以找到已发送和已接收但未丢失的数据包数。

如果您知道设备正在发送多少数据包,并且在服务器端检测到来自该设备的数据包数量,则差异应该有助于您了解丢失数据包的数量。 (此方法需要您控制服务器并涉及更多设备 - 服务器通信)

希望这会有所帮助。

答案 1 :(得分:2)

我认为,您需要的计数器位于/ proc / net / netstat文件中。