Laden...

multithreading

Erstellt von moooki vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.258 Views
M
moooki Themenstarter:in
34 Beiträge seit 2007
vor 17 Jahren
multithreading

hallo leute
ich hab nen programm geschrieben welches aus einer txt urls ausliest und diese checkt ob eine index.php vorhanden ist

die ergebnisse werden in 2 dateien gespeichert, einmal eine wenn sie vorhanden ist und eine wenn nicht!

jetzt meine frage...
nachdem das ziemlich langsam abläuft, vlt könnt ihr mir ja helfen das ganze mit threads zu versehen!

ich hab das leider nicht geschafft!

die abfrage auf die index mach ich mit einem httpwebrequest

also so in etwa:

  1. datei zeilenweise einlesen...
  2. schleife
    wile (line != null)
    {

try..
httpwebreqeust...
catch...
}

wie setzz ich denn das ganze in threads?

könnt ihr mirhelfen?

man könnte das auch mit einem multithread portscanner vergleichen!

Wer anderen eine Grube gräbt, hat ein Grubengrabgerät🙂

M
1.439 Beiträge seit 2005
vor 17 Jahren

Solange du nur eine CPU/Core hast, wird dein Programm dadurch nicht schneller.
Threading Tutorial

M
moooki Themenstarter:in
34 Beiträge seit 2007
vor 17 Jahren

ne das meinte ich nicht so ganz....

nehmen wir als beispiel den portscanner

er soll "localhost" von port 1 bis 1000 checken
normalerweise würde er dann so vorgehen, das er localhost NACHEINANDER auf jeden port gecheckt wird...
das heist, er checkt 1000 mal (von 1 bis 1000) die ip localhost

richtig?

jetzt möchte ich es aber so, das er zb 50 threads aufmacht
und 50 mal GLEICHZEITIG localhost checkt... is so schwer zu erklären 😁

damit meinte ich das er ports von 1 bis 50 gleichzeitig checkt und nicht nacheinander...
geht ja viel schneller

Wer anderen eine Grube gräbt, hat ein Grubengrabgerät🙂

M
1.439 Beiträge seit 2005
vor 17 Jahren

Wenn du nur eine CPU hast, kannst du nicht 50 Threads gleichzeitig ausführen, sondern nur einen!
Wenn du 50 Threads erstellst, werden diese Quasi-Parallel ausgeführt. D.h.: Alle n ms wird ein anderer Thread ausgeführt. Dadurch denkt der Benutzer, dass die Threads parallel laufen.

M
1.439 Beiträge seit 2005
vor 17 Jahren

Es macht aber durchaus Sinn einen zweiten Thread zu erstellen, der die Ports scannt, damit der GUI-Thread noch reagiert.

M
moooki Themenstarter:in
34 Beiträge seit 2007
vor 17 Jahren

ich rede ja auch nicht von cpu threads
sondern von webthreads!

wenn du ms word 2 mal startest hast du auch 2 threads!

Wer anderen eine Grube gräbt, hat ein Grubengrabgerät🙂

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von moooki
und 50 mal GLEICHZEITIG localhost checkt... is so schwer zu erklären 😁

damit meinte ich das er ports von 1 bis 50 gleichzeitig checkt und nicht nacheinander...
geht ja viel schneller

Wozu machst du das überhaupt?

T
125 Beiträge seit 2005
vor 17 Jahren

Ich denke mal da der PC ja nach einander 50 anfragen ins Internet schicken kann, nun auf alle 50 wartet und je nachdem welcher Thread zu erst anwortet macht als erstes weiter. Also würde ich sagen, das es etwas bringt, sofern es nicht die selbe IP ist.

Such mal nach BackgroundWorker, damit ist es Threadsicherer zu lösen.
Oder du versuchst es mit Delegate diese als Asyncrone aufzurufen, so das du ein Callback zum auffangen des Ergebniss nutzen kannst ->Nachteil GUI Thread muss mit Invoke angesprochen werden was beim BackgroundWorker unnötig ist.

M
moooki Themenstarter:in
34 Beiträge seit 2007
vor 17 Jahren

anders:

ich hab eine txt da sind ips drin:

111.111.111.111
222.222.222.222
333.333.333.333
444.444.444.444
555.555.555.555

diese 5 stk!

jetzt möchte ich das das programm diese 5 ips check, also ob sie nen response bekommen, das mach ich mit tcpclient.... wie auch immer

bisher ist es so, das er nacheinadner die ips check ob die erreichbar sind!

ich möchte aber das er diese 5 ips gleichzeitig checkt!
also 5 threads aufmacht! in jedem thread eine andere ip!

wie stelle ich das an?

Wer anderen eine Grube gräbt, hat ein Grubengrabgerät🙂

4.506 Beiträge seit 2004
vor 17 Jahren

Hallo moooki,

mal ganz davon abgesehen, dass das wohl die lustigsten IP's sind die ich je gesehen habe:


333.333.333.333
444.444.444.444
555.555.555.555

Würde ich behaupten, dass es auch reicht, einen Working-Thread neben der GUI laufen zu lassen, der einen Ping der Reihe nach versucht. Du hast nur eine Netzwerkkarte (nehme ich mal an), da helfen Dir wahrscheinlich keine mehrere Threads. Ein Portscan ist übrigens nochmal etwas anderes.

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

M
moooki Themenstarter:in
34 Beiträge seit 2007
vor 17 Jahren

ok nochmal anders 😄:

ich will localhost auf offene ports scannen!
wie mache ich das am SCHNELLSTEN? also das scannen

lieben gruß, markus

Wer anderen eine Grube gräbt, hat ein Grubengrabgerät🙂

B
1.529 Beiträge seit 2006
vor 17 Jahren

Zum Thema Ping:
Du benötigst keine eigenen Threads, sondern kannst einfach _
System.Net.NetworkInformation.Ping.SendAsync()_ verwenden.

Zum Thema PortScan:
Um das zu bewerkstelligen, benötigst zu allererst mal Netzwerkkenntnisse, die du nicht hast.

M
moooki Themenstarter:in
34 Beiträge seit 2007
vor 17 Jahren

ok ein letztes mal 🙂

also ich hab eine txt! in dieser txt stehen ips drin:

localhost
123.123.123.123
80.0.0.0
192.168.0.1
usw...

jetzt möchte ich jede ip checken ob ein port zwischen 0 und 1000 offen ist!
135 zb wäre immer offen! is ja netbios!!

jetzt könnte ich das ganze in eine schleife schreiben:

while(read != NULL)
{
for (int i=0; i<=1000; i++)
{

teste ob i auf ip geht!
}
}

usw...
angenommen ich hab 4 ips in der txt!
dann müsste er 4000 mal checken, und das leider hintereinander! 4000, weil 4 ips a 0 - 1000 ports!

wie kann ich das ganze schneller machen? geht das überhaupt?

Wer anderen eine Grube gräbt, hat ein Grubengrabgerät🙂

B
1.529 Beiträge seit 2006
vor 17 Jahren

Auch zum letzten Mal:
Wir haben dich verstanden. Wir haben dir auch gesagt, wie du verschiedene Rechner anpingen kannst.

Allerdings verwendet Ping ein ICMP Echo Request (Internet Control Message Protocol), welches auf IP (Internet Protocol) basiert. Daher kann man auch keine bestimmten Ports anpingen, da es Ports erst im ebenfalls IP-basierten TCP (Transmission Control Protocol) gibt, sondern nur bestimmte IP-Adressen.
Um jetzt die Ports zu scannen, müsstest du dich im einfachsten Fall jeweils per UDP und TCP mit ihnen zu verbinden versuchen. Was auch immer du tust, so wirst du doch nur feststellen, dass du keine Lücke hast, die jemand, der genauso viel wie du weiß, finden würde...
Um mit (relativer) Sicherheit irgendwelche Aussagen treffen zu können, müsstest du jedoch einen ganzen Stapel von Tests über die Ports laufen lassen.
Da dir diese Kenntnisse fehlen, wiederhole ich noch einmal, dass du keinen wirklichen Erfolg haben wirst.

Lad dir lieber einen der vielen Portscanner runter. Wenn du dich doch etwas mehr in die Thematik vertieft hast, kannst du auch nmap verwenden (gibt es auch für Windows: nMapWin).