Android Ping tool

Diskutiere Ping tool im Mobile Geräte Forum; Hi, ich bin gerade dabei ein Ping tool zu Programmieren. Nachdem ich es als normales Java Programm programmiert hatte und es sehr gut funktioniert...

  1. MaxG.
    MaxG. Mitglied
    Hi,
    ich bin gerade dabei ein Ping tool zu Programmieren. Nachdem ich es als normales Java Programm programmiert hatte und es sehr gut funktioniert hat, habe ich mir gedacht das ich es auch als Android App programmieren könnte. Als ich meine App ausprobiert habe, viel mir auf das als Meldung immer "Host is not reatchable" zurück kommt. Genau wie in meinem Java Programm habe ich auch die Klasse
    Code (Text):
    java.net.InetAddress.getByName(ipAddress).isReachable(5000);
    verwendet.

    Wie kommt es dazu das das Java Programm funktioniert und die Android App nicht?

    Code (Java):
    package com.grohmann.pingtest;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.content.Context;
    import android.widget.TextView;

    import java.net.InetAddress;

    public class MainActivity extends AppCompatActivity {

        Button buttonStartPing;
        EditText ipAdresse;
        RadioButton radioButton;
        RadioButton radioButtonURL;
        RadioGroup radioGroup;
        TextView textViewResults;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            buttonStartPing = (Button) findViewById(R.id.buttonPingStarten);
            ipAdresse = (EditText) findViewById(R.id.textFeldIPAdresse);
            radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
            textViewResults = (TextView) findViewById(R.id.textViewResults);
            radioButtonURL = (RadioButton) findViewById(R.id.radioButtonURL);
            final Context context = getApplicationContext();


            radioButtonURL.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ipAdresse.setText("https://");
                }
            });


            buttonStartPing.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    String ip = ipAdresse.getText().toString();

                    int selectedId = radioGroup.getCheckedRadioButtonId();
                    radioButton = (RadioButton) findViewById(selectedId);

                    String selectetButton = radioButton.getText().toString();

                    if(selectetButton.equals("IP")){


                        boolean reachable = ping(ip);

                        textViewResults.setText((reachable) ? "Host ist reachable" : "Host is NOT reachable");


                    }else{
                        boolean reachable = ping(ip);

                        textViewResults.setText((reachable) ? "Host ist reachable" : "Host is NOT reachable");
                    }



                }
            });





        }

        public boolean ping(String ipAddress){
            boolean reachable = false;
            try{
                reachable = InetAddress.getByName(ipAddress).isReachable(5000);
            }catch (Exception e){
                e.printStackTrace();
            }

            return  reachable;
        }
    }
     
    Code (Java):
    package Sonstige;

    import java.net.InetAddress;

    public class PingTest {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            boolean reachable = false;
             
            try
            {
                reachable = InetAddress.getByName("10.36.56.11").isReachable(5000);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
           
            System.out.println((reachable) ? "Host ist reachable" : "Host is NOT reachable");

        }

    }
     
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. Robat
    Robat Aktives Mitglied
    Bekommst du eine Exception?
    Hast du die Permissions INTERNET und ACCESS_NETWORK_STATE in der Manifest gesetzt?
     
  4. Robat
    Robat Aktives Mitglied
    -doppelpost
     
  5. MaxG.
    MaxG. Mitglied
    hab meine Manifest.xml angepasst aber geht immer noch nicht bekomme auch keine Exeption
    Code (Java):
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.grohmann.pingtest">
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>
     
  6. Robat
    Robat Aktives Mitglied
    Okay, hab noch mal in der AndroidDoc nachegelsen und festgestellt dass die #isReachable(int) Methode (wie bei Java auch) versucht einen ICMP ECHO REQUEST zu schicken. Sollte das Fehlschlagen wird versucht eine TCP Verbindung über Port 7 aufzubauen. Nun ist es so, dass viele Android Devices (zmd mMn / mEn) kein ICMP untersützen und die meisten Server keine TCP Connections über den Port 7 zulassen. (letzteres ist eher solides Halbwissen als ein Fakt von mir). Demnach kann es gut sein das die #isReachable(int) einfach immer abbricht und daher false zurückliefert.

    Was du sonst noch versuchen könntest wäre dir eine eigene Methode zu schrieben die schaut ob eine IP angepingt werden kann.. sowas in der Art:

    Code (Java):

    public boolean reachable(Context c)
    {
        ConnectivityManager cManager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cManager.getActiveNetworkInfo();
     
        if(networkInfo != null && networkInfo.isConnected())
        {
             try
             {
                   URL url = new URL("http://10.36.56.11"); // ip entsprechend ändern bspw zu: http://www.google.de
                   HttpUrlConnection urlCon = (HttpUrlConnection) url.openConnection();
                   urlCon.setConnectTimeout(1000); // in ms
                   urlCon.connect();
               
                   return (urlCon.getResponseCode() == 200); // 200 i= "OK"
               
             } catch (IOException e) {
                return false;
             }

        }

         return false; // Verbindung fehlgeschlagen

    }
     
    Denk aber daran dass du die Verbindung nicht auf dem MainThread laufen lässt. Dir fliegt sonst eine Exception um die Ohren ;)

    Gruß Robert
     
  7. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Ping tool - Ähnliche Themen

Eclipse Luna (4.4) 'Undo Typing' Button in Toolbar importieren?
Eclipse Luna (4.4) 'Undo Typing' Button in Toolbar importieren? im Forum IDEs und Tools
Minecraft-Server pingt lange
Minecraft-Server pingt lange im Forum Allgemeine Java-Themen
Ping in JTextArea anzeigen
Ping in JTextArea anzeigen im Forum Netzwerkprogrammierung
JPanel rotieren, Bild ist abgeschnitten, Clipping?
JPanel rotieren, Bild ist abgeschnitten, Clipping? im Forum AWT, Swing, JavaFX & SWT
Enums und passendes Mapping
Enums und passendes Mapping im Forum Datenbankprogrammierung
Thema: Ping tool