Tôi cần thực hiện ping icmp cho máy chủ từ thiết bị Android của mình. Tôi cần đo thời gian chuyến đi khứ hồi. Tôi thành thạo với android và java, chỉ cần không biết những gì thư viện để sử dụng. Tôi làm cách nào? Có thể qua 3G, Edge không?cách ping icmp trên android
Trả lời
Có thể bạn sẽ muốn sử dụng số isReachable
- xem thêm chi tiết trong số Android doc. Tuy nhiên, dường như một số mạng chặn ICMP. Có một bài đăng nơi bạn có thể đọc thêm về vấn đề này here.
bạn có thể sử dụng mã nguồn mở của giả lập thiết bị đầu cuối sẵn here
xây dựng thư viện (sử dụng cygwin và android-ndk) tập tin và sau đó sử dụng
Có bạn có thể ping với 3G, cạnh, không dây bất cứ điều gì , miễn là bạn có kết nối. Hạn chế duy nhất là trong giả lập, xem tại đây: http://groups.google.com/group/android-developers/browse_thread/thread/8657506be6819297
Đây là chức năng ping của tôi:
package com.namespace.router.api;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import android.util.Log;
public class Network {
private static final String TAG = "Network.java";
public static String pingError = null;
/**
* Ping a host and return an int value of 0 or 1 or 2 0=success, 1=fail, 2=error
*
* Does not work in Android emulator and also delay by '1' second if host not pingable
* In the Android emulator only ping to 127.0.0.1 works
*
* @param String host in dotted IP address format
* @return
* @throws IOException
* @throws InterruptedException
*/
public static int pingHost(String host) throws IOException, InterruptedException {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("ping -c 1 " + host);
proc.waitFor();
int exit = proc.exitValue();
return exit;
}
public static String ping(String host) throws IOException, InterruptedException {
StringBuffer echo = new StringBuffer();
Runtime runtime = Runtime.getRuntime();
Log.v(TAG, "About to ping using runtime.exec");
Process proc = runtime.exec("ping -c 1 " + host);
proc.waitFor();
int exit = proc.exitValue();
if (exit == 0) {
InputStreamReader reader = new InputStreamReader(proc.getInputStream());
BufferedReader buffer = new BufferedReader(reader);
String line = "";
while ((line = buffer.readLine()) != null) {
echo.append(line + "\n");
}
return getPingStats(echo.toString());
} else if (exit == 1) {
pingError = "failed, exit = 1";
return null;
} else {
pingError = "error, exit = 2";
return null;
}
}
/**
* getPingStats interprets the text result of a Linux ping command
*
* Set pingError on error and return null
*
* http://en.wikipedia.org/wiki/Ping
*
* PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
* 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.251 ms
* 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.294 ms
* 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.295 ms
* 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.300 ms
*
* --- 127.0.0.1 ping statistics ---
* 4 packets transmitted, 4 received, 0% packet loss, time 0ms
* rtt min/avg/max/mdev = 0.251/0.285/0.300/0.019 ms
*
* PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
*
* --- 192.168.0.2 ping statistics ---
* 1 packets transmitted, 0 received, 100% packet loss, time 0ms
*
* # ping 321321.
* ping: unknown host 321321.
*
* 1. Check if output contains 0% packet loss : Branch to success -> Get stats
* 2. Check if output contains 100% packet loss : Branch to fail -> No stats
* 3. Check if output contains 25% packet loss : Branch to partial success -> Get stats
* 4. Check if output contains "unknown host"
*
* @param s
*/
public static String getPingStats(String s) {
if (s.contains("0% packet loss")) {
int start = s.indexOf("/mdev = ");
int end = s.indexOf(" ms\n", start);
s = s.substring(start + 8, end);
String stats[] = s.split("/");
return stats[2];
} else if (s.contains("100% packet loss")) {
pingError = "100% packet loss";
return null;
} else if (s.contains("% packet loss")) {
pingError = "partial packet loss";
return null;
} else if (s.contains("unknown host")) {
pingError = "unknown host";
return null;
} else {
pingError = "unknown error in getPingStats";
return null;
}
}
}
ping (8.8.8.8) luôn thất bại – danarj
Không hoạt động trên samsung s3 4.2.2 và thiết bị 4.2.2 khác !! –
cẩn thận với chuỗi khớp: .contains "mất gói 100%" và "mất gói 0%" là như nhau. –
- 1. Android ICMP ping
- 2. Thực hiện ping ICMP trong Go
- 3. Làm thế nào để kích hoạt tính năng Ping (ICMP) trên Azure
- 4. Cách ping không cần quyền quản trị trên Windows?
- 5. Cách ping khách trên Ubuntu trên VirtualBox
- 6. Dịch vụ Android - Ping URL
- 7. Làm cách nào để triển khai ping ICMP trong Ruby bằng cách sử dụng thư viện socket chuẩn?
- 8. trăn không có đặc quyền ICMP
- 9. Scapy cách nhận thời gian ping?
- 10. Ping SNMP là gì?
- 11. Có thể thực hiện ping trên windows phone 7 không?
- 12. Ổ cắm ICMP (linux)
- 13. icmp đã nhận được, nhưng không trả lời
- 14. Ping tên máy chủ trên mạng
- 15. Ping một dải IP với Scapy
- 16. Không thể ping/giao tiếp với các thiết bị Android trên cùng một mạng
- 17. Làm thế nào tôi có thể ping một máy chủ với một Perl một lớp lót với Net :: Ping?
- 18. Bluetooth Ping Latency
- 19. Cách viết phương thức Ping đơn giản trong Cocoa/Objective-C
- 20. PHP có thể ping một hệ thống từ xa mà không có ICMP và không có các chương trình bên ngoài không?
- 21. Linux ping broadcast switch
- 22. ActiveMQ JMS ping
- 23. Gửi một ping đến từng IP trên mạng con
- 24. Sự khác biệt giữa Ping trên Windows và Ubuntu
- 25. Tại sao ping hoạt động mà không có đặc quyền quản trị viên?
- 26. Cách nhận yêu cầu ICMP trong C với ổ cắm thô
- 27. Cách ping địa chỉ IP bằng cách sử dụng JavaScript
- 28. ping ruby cho 1.9.1
- 29. Ping với iPhone SDK
- 30. C# ping minecraft
Tại sao bạn cần phải đo thời gian khứ hồi ICMP? – dbasnett