我正在制作一个应用程序,将实现“ping”命令的一些功能。问题是,我不知道在ANDROID中使用哪个库/库。
有人对此有任何想法吗?
我访问了这些stackoverflow链接,但它们没有提供太多帮助。
我正在制作一个应用程序,将实现“ping”命令的一些功能。问题是,我不知道在ANDROID中使用哪个库/库。
有人对此有任何想法吗?
我访问了这些stackoverflow链接,但它们没有提供太多帮助。
我已经使用以下代码进行ping测试。
public String ping(String url) {
String str = "";
try {
Process process = Runtime.getRuntime().exec(
"/system/bin/ping -c 8 " + url);
BufferedReader reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
int i;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((i = reader.read(buffer)) > 0)
output.append(buffer, 0, i);
reader.close();
// body.append(output.toString()+"\n");
str = output.toString();
// Log.d(TAG, str);
} catch (IOException e) {
// body.append("Error\n");
e.printStackTrace();
}
return str;
}
在这个URL中,您需要传递要ping的地址。
public void pingTheServer(View view){
txtStatus.setText(ping("http://www.blueleaftech.in"));
}
但无法显示返回的字符串,我已经设置了使用网络权限。 - Prasanth A R我想分享一种解决方案,就是使用本地代码创建一个ICMP套接字。我利用这个套接字发送和接收ICMP数据包(也就是用于“ping”的回显请求和响应)。自2011年以来,Linux内核支持创建不需要特殊权限的ICMP套接字。新的ICMP套接字作为一个数据报套接字被创建,协议类型为PROT_ICMP。这里有一个很好的C语言实现示例,可在this answer中查看。
ICMP套接字功能也已经被移植到了Android平台,并且甚至被用于"ping"程序中。实际上,有人建议它可以用来修复InetAddress.isReachable()的实现。
Java API不支持此功能,但使用本地代码可以打开ICMP套接字。我使用JNA访问所需的libC函数(socket()、close()、sendto()、recvfrom()、poll()等)。我想JNI也可以同样适用。
为了绕过VPN限制,需要使用VpnService.protect(int)来保护套接字文件描述符。
如 LWN文章 所述,有一些需要注意的地方: