wikki Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 Hiho! Ich habe ein neues Problem... Ich möchte gern eine Datei einlesen, in welcher IP Adressen stehen, das habe ich (bestimmt nicht "einwandfrei") schonmal gemacht: Mit Swing public class einlesen_Swing extends JFrame{ public einlesen_Swing() { super("Eingelesene Datei"); setDefaultCloseOperation(EXIT_ON_CLOSE); JTextArea textArea = new JTextArea(); try { textArea.read(new FileReader("c:/ip.txt"), ""); } catch (Exception e) { e.printStackTrace(); } JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(320, 240)); add(scrollPane); pack(); setVisible(true); } public static void main(String[] args) { new einlesen_Swing(); } } Ohne Swing public class einlesen { public static void main(String[] args) { Reader leser = null; try { leser = new FileReader("/ip.txt"); for (int x; (x =leser.read()) !=-1 System.out.print((char) x); } catch (IOException e) { System.err.println("Fehler beim Lesen der Datei"); } finally { try {leser.close();} catch (Exception e){} } } }[/code] In der ip.txt stehen einige IP Adressen...diese sollen angepingt werden. Jedoch habe ich absolut keine Idee wie das gehen soll? Kennt Ihr da Anleitungen oder könnt mir direkt helfen? Würde mich sehr freuen! grüße! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sporticus Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 Hi, vielleicht hilft dir ja das weiter: Java: Ping absetzen und Rückgabe einlesen @ tutorials.de: Tutorials, Forum & Hilfe grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 Danke! Leider kann ich daraus nichts lernen... Wie kann ich das 2. Beispiel (weil das würde ja meinem Programm direkt sagen "ja ip ist da" oder eben "ne ip ist nicht erreichbar") so nutzen das es die IP´s aus der *.txt Datei einliest und abarbeitet? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 In beiden Fällen ist auf jeden Fall noch Anpassungsbedarf vorhanden, damit du die IP Adressen dann auch wirklich zum pingen benutzen kannst. Ich würde an deiner Stelle auch an der zweiten Möglichkeit weiter arbeiten. Die mit der TextArea bringt dir halt nicht viel, du hast dann zwar die IP Adressen erstmal im Programm...aber mehr halt auch nicht, die einzelnen IP Adressen bekommst du aus der TextArea auch so noch nicht raus. Ansonsten wie sind denn die IP Adressen in der Textdatei abgespeichert? Jede IP in einer Zeile? Durch Kommas getrennt? Und sobald das Auslesen dir immer jeweils eine IP zurück liefert, kannst du anfangen darüber nachzudenken ob du gleich beim Auslesen die IPs anpingen willst. Wenn nicht, solltest du die auch noch zwischenspeichern. In einer Liste, oder wenn du vorher genau weißt wie viele IPs es sind, geht auch ein Array. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 Ansonsten wie sind denn die IP Adressen in der Textdatei abgespeichert? Jede IP in einer Zeile? Durch Kommas getrennt? Und sobald das Auslesen dir immer jeweils eine IP zurück liefert, kannst du anfangen darüber nachzudenken ob du gleich beim Auslesen die IPs anpingen willst. Wenn nicht, solltest du die auch noch zwischenspeichern. In einer Liste, oder wenn du vorher genau weißt wie viele IPs es sind, geht auch ein Array. 1 IP pro Zeile, durch nichts getrennt (außer Zeilenumbruch). Wie viele IP´s es werden weiß ich leider nicht :/ Ich soll später das Programm auf einen ServerManager laufen lassen, aber mir geht´s erst einmal darum das ganze irgendwie zu verstehen... Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 Bei dem Aufbau der Datei solltest du dir am besten mal den BufferedReader anschauen, der stellt die Methode readLine() zur Verfügung. Diese Methode liest, bei dir aus der Datei, immer jeweils eine Zeile aus und gibt sie zurück. In deinem Fall würde die Methode bei jedem Aufruf die nächste IP zurück liefern. Und entweder du pingst diese IPs dann direkt beim Einlesen an oder du speicherst sie erstmal zwischen. Dafür solltest du dir dann mal Listen anschauen, zum Beispiel die ArrayList. Möglichkeiten IPs anzupingen hat dir Sporticus ja schon genannt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 hey, nun du wilst ja aus er txt datei ips auslesen und dann anpingen. ich würd an deiner stelle so vorgehn: 1. txt-datei öffnen mit der klasse randomaccessfile <-- die beste um rnd zugriff auf die datei zu haben 2. alle zeilen einzeln in eine generischen typ zwischenspeichern jeder einttag eine zeile halt 3. string splitten beim . ergebnisse in einem weiteren generischen typ speichern (mehrdimensionales hast dann) 4. Sockets öffnen mit der ip, dann anpingen (obs sockets heist oder nicht ka in java) Aber tu dir selber einen gefallen und öffne nicht für jede zeile die du lesen willst die datei dadurch wird das programm verdammt langsam(ab einer bestimmten anzahl der zeilen die du lesen willst) und tausche im socket die ip einfach aus falls es sockets gibts was normal der fall sein sollte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sporticus Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 (bearbeitet) Hi, also ich muss sagen, mit den zwei Lösungen von Dragon und mir ist er schon ganz gut bedient. Er muss die zwei Komponenten dann nur noch zusammenfügen und das wars. Was du vorschlägst 2K1.INC ist zwar auch möglich, klingt aber erstmal schon recht kompliziert. Und wir wollen das Problem ja nicht komplizierter machen, als es eigentlich ist. Oder? Wenn man das alles mal kurz zusammen fast, dann sieht das ungefähr so aus: 1. Datei zeilenweise einlesen 2. Strings vom einlesen in einer List abspeichern 3. ProcessBuilder aufrufen mit "ping " + list.get(xy) und das wars im Grund auch schon Bearbeitet 17. Juni 2011 von Sporticus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 Danke nochmals! Hier mal aktuell mein einlesen Code...der sollte wesentlich besser zu verarbeiten sein. public static void main(String [] args){ String line; ArrayList<String> array = new ArrayList<String>(); try{ FileReader test = new FileReader("/ip.txt"); //öffnet meine ip.txt Datei BufferedReader in = new BufferedReader(test); //benutzt den BufferedReader um jede Zeile Einzeln aus zu werten for(int i = 0;(line = in.readLine())!=null; i++){ //bügelt also mit einer Schleife drüber array.add(line); //welche solange läuft bis das ende meiner Datei erreicht ist } //die Ergebnisse werden in array.add(line) gespeichert } catch(IOException e){ System.out.println("Pfadangabe Falsch?!"); //falls der Datei-Pfad falsch ist wird hier eine Fehlermeldung ausgegeben } for(int i=0; i < array.size(); i++) //schleife um zu testen ob der Inhalt angekommen ist System.out.println( array.get( i ) ); Nun muss ich nur noch das mit den Pingen hinbekommen... aber ich glaub das bekomm ich hin...meld mich bald wieder Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 (bearbeitet) ja trotzdem sollte man randomaccessfile nutzen damit kann man sicher besser in der datei bewegen... mein prinzip weicht nur am ende von eurem ab. Zudem sollte man nicht nur drauf achten das es einfach ist sondern auch performant und jenachdem solche anwendungen werden sehr schnell sehr langsam und es schadet nicht mal neues kennen zu lernen. ich sagte nie euer vorschlag is falsch oder *******e oder sonst was ich hab ihm nur was andres vorgeschlagen. Bearbeitet 17. Juni 2011 von 2K1.INC Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 ich sagte nie euer vorschlag is falsch oder *******e oder sonst was ich hab ihm nur was andres vorgeschlagen. o.O Ganz ruhig, das hatt nämlich auch keiner von deinem gesagt^^ Ehrlich gesagt habe ich deinen Post noch nicht gesehen zu dem Zeitpunkt! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 RandamAccessFile ist sicher bei manchen Sachen die bessere Wahl, der OT möchte aber keinen wahlfreien Zugriff auf die Datei, sondern einfach nur die in der Datei enthaltenen IPs nacheinander auslesen. Ich habe mir die zugrundeliegenden Klassen zwar noch nicht genauestens angeschaut, aber wenn er nur alles noch einander Auslesen will, warum sollte er dann den Overhead mitnehmen den die RandomAccessFile Klasse wahrscheinlich mit sich bringt? Und ob er dann halt über das OS Ping Kommando die IPs überprüft oder über die Socket Variante, muss sich jetzt der OT überlegen, bzw vielleicht ist das in seiner Aufgabe ja auch vorgegeben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 o.O Ganz ruhig, das hatt nämlich auch keiner von deinem gesagt^^ Ehrlich gesagt habe ich deinen Post noch nicht gesehen zu dem Zeitpunkt! ich bin ruhig, nur **** lässt es iwie so aggro aussehn. von overhead kann man nicht reden, weil ja im prinzip egal ist ob du ein objekt von raf oder br hast das ist so minimal das merkt man nicht. Overhead wäer wenn man auf simple sachen mit linq oder sowas drauf geht... ich hab ihm nur nen vorschlag gemacht das zu nutzen weil mit raf kannst du eig alles machen. ich denk mal die anwendung wird mehr können sollen als nur pingen, weil es würde keinen sinn ergeben in java extra ne anwendung zu schreiben die nur pingt.. sollte dies der fall sein würde er mit sockets den die grundbasis haben worauf er aufbauen kann und mit raf alles abdecken falls sich die datei ändert bzw er mal schreiben muss. wobei er später eig nur die vorhanden socket daten weiter verarbeitet oder raf anders nutzt jedoch müsste er am vorhanden code was pingen angeht nix mehr ändern Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sporticus Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 ok, da hast du natürlich recht. Ich für meinen Teil habe die Lösung allerdings nur so beschrieben, wie sie auch zur Frage gepasst hat. Ich habe halt nicht weitergedacht, da er das eben nicht mehr wissen wollte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 3. ProcessBuilder aufrufen mit "ping " + list.get(xy) Hmm, ich bekomms doch net hin....wie ruf ich die Liste den auf? ProcessBuilder prozess = new ProcessBuilder(new String[] {"ping", list.get(array(i)) }); So geht das iwie nicht <.< Danke nochmals Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 (bearbeitet) ProcessBuilder prozess = new ProcessBuilder(new String[] {"ping", list.get(i) }); versuchs einfach damit. weis nicht wieso du da get(array) machst. edit: post mal plx dein code der würde mich interessieren. Bearbeitet 17. Juni 2011 von 2K1.INC Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 Danke! Leider spuckt Eclipse das aus: Exception in thread "main" java.lang.Error: Unresolved compilation problems: list cannot be resolved i cannot be resolved to a variable Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 post mal plx dein code Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sporticus Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 also, dein Code sieht ja folgendermaßen aus: public static void main(String [] args){ String line; ArrayList<String> array = new ArrayList<String>(); try{ FileReader test = new FileReader("/ip.txt"); //öffnet meine ip.txt Datei BufferedReader in = new BufferedReader(test); //benutzt den BufferedReader um jede Zeile Einzeln aus zu werten for(int i = 0;(line = in.readLine())!=null; i++){ //bügelt also mit einer Schleife drüber array.add(line); //welche solange läuft bis das ende meiner Datei erreicht ist } //die Ergebnisse werden in array.add(line) gespeichert } catch(IOException e){ System.out.println("Pfadangabe Falsch?!"); //falls der Datei-Pfad falsch ist wird hier eine Fehlermeldung ausgegeben } for(int i=0; i < array.size(); i++) { //schleife um zu testen ob der Inhalt angekommen ist [COLOR="seagreen"]// Deinen Code hier einsetzen und die Variable 'list' durch 'array' ersetzen[/COLOR] ProcessBuilder prozess = new ProcessBuilder(new String[] {"ping", [COLOR="red"]array[/COLOR].get(i) }); [COLOR="seagreen"]// TODO ProcessBuilder starten und InputStream anzapfen[/COLOR] System.out.println( array.get( i ) ); } Du kannst ja schließlich nicht auf die Variable 'list' zugreifen, wenn es die gar nicht gibt. Die musst du schon durch die Variable ersetzen, wie du deine List benannt hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 also, dein Code sieht ja folgendermaßen aus: public static void main(String [] args){ String line; ArrayList<String> array = new ArrayList<String>(); try{ FileReader test = new FileReader("/ip.txt"); //öffnet meine ip.txt Datei BufferedReader in = new BufferedReader(test); //benutzt den BufferedReader um jede Zeile Einzeln aus zu werten for(int i = 0;(line = in.readLine())!=null; i++){ //bügelt also mit einer Schleife drüber array.add(line); //welche solange läuft bis das ende meiner Datei erreicht ist } //die Ergebnisse werden in array.add(line) gespeichert } catch(IOException e){ System.out.println("Pfadangabe Falsch?!"); //falls der Datei-Pfad falsch ist wird hier eine Fehlermeldung ausgegeben } for(int i=0; i < array.size(); i++) { //schleife um zu testen ob der Inhalt angekommen ist [COLOR="seagreen"]// Deinen Code hier einsetzen und die Variable 'list' durch 'array' ersetzen[/COLOR] ProcessBuilder prozess = new ProcessBuilder(new String[] {"ping", [COLOR="red"]array[/COLOR].get(i) }); [COLOR="seagreen"]// TODO ProcessBuilder starten und InputStream anzapfen[/COLOR] System.out.println( array.get( i ) ); } Du kannst ja schließlich nicht auf die Variable 'list' zugreifen, wenn es die gar nicht gibt. Die musst du schon durch die Variable ersetzen, wie du deine List benannt hast. perfekt! Tausend Dank, funktioniert einwandfrei Ich mach mich nun die Tage an die nächste Baustelle und werd wohl sicherlich wieder eure Hilfe benötigen... Danke nochmals! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 17. Juni 2011 Teilen Geschrieben 17. Juni 2011 Du weißt aber hoffentlich, dass du zwar damit das Ping Kommando aufrufst, aber noch nicht auswertest ob der Ping nun erfolgreich durchgeführt wurde, oder nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 17. Juni 2011 Autor Teilen Geschrieben 17. Juni 2011 Du weißt aber hoffentlich, dass du zwar damit das Ping Kommando aufrufst, aber noch nicht auswertest ob der Ping nun erfolgreich durchgeführt wurde, oder nicht? hehe, jap, habe ich auch gemerkt Was würdest du den machen ? Also wie fängt man Keine ServerAntworten auf? grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 18. Juni 2011 Teilen Geschrieben 18. Juni 2011 Zum einen musst du den Prozess erstmal starten. Bisher hast du dir nur einen ProcessBuilder erstellt mit dem man dann die Prozesse starten kann. Wenn du auf deinem ProcessBuilder die Methode start() aufrufst, wird der Prozess erst gestartet und die Methode gibt dir ein Process Objekt zurück. Das Objekt stellt dir dann verschiedenen Methoden bereit um die Ausgabe und den Rückgabewert des Kommandos auszuwerten. Ich weiß gerade nicht, ob das ping Kommando ein Fehlercode zurückliefert wenn es das Ziel nicht erfolgreich pingen konnte. Wenn ja, reicht dir die Methode exitValue(), wenn der Wert > 0 ist, war das Kommando nicht erfolgreich. Ansonsten musst du die Ausgabe auswerten über das Kommando getInputStream(). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 20. Juni 2011 Autor Teilen Geschrieben 20. Juni 2011 Heyho! Funktioniert schonmal ganz gut: ProcessBuilder prozess = new ProcessBuilder(new String[] {"ping", array.get(i) }); // TODO ProcessBuilder starten und InputStream anzapfen Process process = prozess.start(); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream())); String line1; try { while ((line1 = bufferedReader.readLine()) != null) { System.out.println(line1); } } catch (IOException e) { e.printStackTrace(); } bufferedReader.close(); System.out.println( array.get( i ) ); nun Pingt er es einwandfrei an. Nun versteh ich nur net wie ich die Exceptions richtig abfange? Eigentlich besteht da folgende Aufgabe dahinter; Das Programm pingt eine Liste mit IP Adresse der Reihe nach an. Ist die IP Adresse NICHT erreichbar -> ignorieren und nächste IP anfragen --------------------------------------------------------------------------- Ist IP erreichbar -> schauen ob Port 47711 Wenn nicht -> Port == 135 oder 445? wenn ja -> als Windows makieren & ausgeben(später in Swing) wenn nicht -> angeben (ip + port) --------------------------------------------------------------------------- Ist Port 47711 -> information vergessen --------------------------------------------------------------------------- möglichkeit IP Adressen für die Zukunft zu verbergen / ignorieren Ich zermürbe mir echt schon ein paar Tage den Kopf.... Ich hoffe ihr könnt mir mal wieder helfen Danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 20. Juni 2011 Teilen Geschrieben 20. Juni 2011 Ach du sollst danach auch noch Ports auf Verfügbarkeit überprüfen? Dann solltest du dir vielleicht doch noch überlegen, dass vielleicht lieber direkt in Java über Sockets zu überprüfen. Ansonsten müsstest du jetzt noch mehrmals über OS Ebene überprüfen ob auch noch die entsprechenende Ports auf dem Host offen sind. Dazu musst du dann mehrmals OS Kommandos aufrufen und die dazu passende Ausgabe parsen. Über Java Mittel könnte man das mit den Klassen Socket, InetSocketAddress und InetAddress lösen. Genaue Beispiele könnte ich nachher posten ,gerade hab ich noch zu tun Und was meinst du mit deiner Frage, wie du Exceptions richtig abfängst? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.