2011-09-16 8 views
13

मुझे अपने एंड्रॉइड डिवाइस से मेजबान को आईसीएमपी पिंग करने की ज़रूरत है। मुझे राउंड ट्रिप टाइम को मापने की जरूरत है। मैं एंड्रॉइड और जावा के साथ कुशल हूं, सिर्फ यह नहीं जानता कि पुस्तकालय का उपयोग किस प्रकार किया जाए। मैं इसे कैसे कर सकता हूं? क्या यह 3 जी, एज के माध्यम से संभव है?एंड्रॉइड पर आईसीएमपी पिंग कैसे करें

+0

क्यों आप ICMP राउंड ट्रिप समय को मापने की जरूरत है? – dbasnett

उत्तर

5

शायद आप isReachable का उपयोग करना चाहते हैं - Android doc में और विवरण देखें। हालांकि, स्पष्ट रूप से कुछ नेटवर्क आईसीएमपी ब्लॉक करते हैं। एक पोस्ट है जहां आप इस समस्या here के बारे में अधिक पढ़ सकते हैं।

2

आप टर्मिनल एमुलेटर का ओपन सोर्स कोड उपलब्ध here

पुस्तकालय (cygwin और android-ndk का प्रयोग करके) फ़ाइल का निर्माण और उसके बाद का उपयोग

14

हाँ, आप 3 जी, धार, वायरलेस के साथ पिंग कर सकते हैं जो कुछ भी उपयोग कर सकते हैं , जब तक आप कनेक्टिविटी है। केवल सीमा एमुलेटर में, यहाँ देख रहा है: http://groups.google.com/group/android-developers/browse_thread/thread/8657506be6819297

यहाँ है मेरी पिंग समारोह:

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; 
     }  
    } 
} 
+1

पिंग (8.8.8.8) हमेशा – danarj

+0

विफल रहता है सैमसंग एस 3 4.2.2 और अन्य 4.2.2 डिवाइस पर काम नहीं कर रहा !! –

+0

स्ट्रिंग मिलान के साथ सावधानी बरतें: "100% पैकेट नुकसान" और "0% पैकेट नुकसान" समान हैं। –

संबंधित मुद्दे