Socket MultiThreading

chrism120

Aktives Mitglied
Servus,
ich habe ein kleines Programm geschrieben. Das hat 3 Funktionalitäten. ich versuche ein Thread zu verwenden allerdings ich habe vorher nie damit zu tun gehabt. Obwohl ich im Internet viel Dokumente darüber gelesen , finde ich immer noch n icht wie ich das machen könnte. kann jemand mir bitte deutlich erklärung , wie diese Multithreading funktioniert und wie ich dieses Problem lösen könnte. Danke im Voraus für Ihr Teilnahme
 

chrism120

Aktives Mitglied
Das ist das Programm und möchte dieses in einem Thread ausführen
Java:
   public static void netscann() {
        Scanner Sc = new Scanner (System.in);
        // defines the Adress
        String IP = "172.20.100";
        //Defines the Delay
        int timeout = 1000;
        for (int i = 1; i <= 254; i++) {
            try {
                String host = IP + "." + i;
                // Intance of IP Address
                InetAddress ad = InetAddress.getByName(host);
                // Erreichbarkeit der Hosts laut Timeout
                if (ad.isReachable(timeout))
                    System.out.println("The  Computer " + ad.getCanonicalHostName() + " with this address " + host + " ist reachable");
            } catch (Exception e) {
            }
        }
    }
 
K

kneitzel

Gast
Also erst einmal läuft dies bereits in einem Thread. Du meinst vermutlich, dass Du es in mehreren Threads ausführen möchtest, damit es schneller geht.

Einführung Threads: http://openbook.rheinwerk-verlag.de/javainsel/15_002.html

Aufbau wäre dann aus meiner Sicht, dass Du eine Klasse hast, die den Arbeitsvorrat bereit hält. Die Threads, die Du startest, holen sich dann alle jeweils aus dem Arbeitsvorrat einen Task und führen diesen aus. So würde ich dies machen.

Arbeitsvorrat ist halt die Prüfung der jeweiligen IPs.
 

mihe7

Top Contributor
Mal ein Beispiel mit Streams:
Java:
import java.net.InetAddress;
import java.util.stream.IntStream;
import java.util.Scanner;

public class Test {
    public static void netscann() {
        Scanner Sc = new Scanner (System.in);        
        // defines the Adress
        String IP = "192.168.178.";
        //Defines the Delay
        int timeout = 1000;
        IntStream.range(1, 255).parallel().mapToObj(i -> IP+i).forEach(host -> check(host, timeout));
    }

    public static void check(String host, int timeout) {
        try {
            InetAddress ad = InetAddress.getByName(host);
            if (ad.isReachable(timeout))
                System.out.println("The  Computer " + ad.getCanonicalHostName() + " with this address " + host + " ist reachable");
        } catch (Exception e) {
        }
    }

    public static void main(String[] args) {
        Test.netscann();
    }
}
 

chrism120

Aktives Mitglied
Also erst einmal läuft dies bereits in einem Thread. Du meinst vermutlich, dass Du es in mehreren Threads ausführen möchtest, damit es schneller geht.

Einführung Threads: http://openbook.rheinwerk-verlag.de/javainsel/15_002.html

Aufbau wäre dann aus meiner Sicht, dass Du eine Klasse hast, die den Arbeitsvorrat bereit hält. Die Threads, die Du startest, holen sich dann alle jeweils aus dem Arbeitsvorrat einen Task und führen diesen aus. So würde ich dies machen.

Arbeitsvorrat ist halt die Prüfung der jeweiligen IPs.
Ganz elementar könnte man hier hereinschauen: http://openbook.rheinwerk-verlag.de...14_002.htm#mj45ef6b526108a654e748170e45b47506 und https://howtodoinjava.com/java-concurrency-tutorial/ Und die Funktion soll wohl als Ganzes in einem Thread ausgeführt werden.
danke
 

chrism120

Aktives Mitglied
Mal ein Beispiel mit Streams:
Java:
import java.net.InetAddress;
import java.util.stream.IntStream;
import java.util.Scanner;

public class Test {
    public static void netscann() {
        Scanner Sc = new Scanner (System.in);       
        // defines the Adress
        String IP = "192.168.178.";
        //Defines the Delay
        int timeout = 1000;
        IntStream.range(1, 255).parallel().mapToObj(i -> IP+i).forEach(host -> check(host, timeout));
    }

    public static void check(String host, int timeout) {
        try {
            InetAddress ad = InetAddress.getByName(host);
            if (ad.isReachable(timeout))
                System.out.println("The  Computer " + ad.getCanonicalHostName() + " with this address " + host + " ist reachable");
        } catch (Exception e) {
        }
    }

    public static void main(String[] args) {
        Test.netscann();
    }
}
ok danke :cool::cool::):):)
 

Ähnliche Java Themen


Oben