AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IP Range

Ein Thema von Luckie · begonnen am 19. Mär 2006 · letzter Beitrag vom 21. Mär 2006
Antwort Antwort
Seite 2 von 3     12 3      
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: IP Range

  Alt 20. Mär 2006, 06:52
Guten Morgen.

Kennt denn keiner mehr die Standard-Routinen inet_addr() und inet_ntoa() aus der Unit WinSock?

Nachdenkliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#12

Re: IP Range

  Alt 20. Mär 2006, 07:07
Zitat:
Weil es zulangsam ist!!
Habs grad mal getest: ?.0.0.0 ?.50.255.255: nach über 4 Minuten CPU-Zeit habe ich den das Programm zurückgesetzt...
Dann darf mann nicht Äpfel mit Birnen vergleichen. Lass mich mal raten: du hast mit den WriteLn(IPToStr(IP)); getestet ? Dann vergleiche das mal mit deiner Methode die ebenfalls WriteLn() benutzt.
Logisch müssen deiner und mein Code fast identisch effizient sein mit dem Unterschied das es mit garnicht sonderlich um Effizienz im Laufzeitverhalten ging sondern um Effizienz im Sourcecode: sprich Überprüfungen, Vermeidung von Rangecheck Errors, sauberer Borland konformer Source.

@marabu: ich weis, denke aber das Luckie das selber machen wollte und eventuell die Unit WinSocks nicht einlinken will. Ich persönlich vermeide es immer WinSocks einzulinken wenn es sich vermeiden lässt. Das Problem ? ganz einfach weil die WinSocks DLLs wohl diejenigen DLLs im Windows sind die am meisten durch 3'rd Party Tools wie Virenscanner, Firewalls, ISDN Treiber, USB Treiber und Trojaner ausgetauscht bzw. sidelinked sind. Man lädt sich also mit WinSocks ohne es zu merken eventuell miesen Code in seine Anwendung.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#13

Re: IP Range

  Alt 20. Mär 2006, 07:10
Gut mir ging es damals bei der Entwicklung nur rein um Geschwindigkeit
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: IP Range

  Alt 20. Mär 2006, 07:15
Begründung:

Gruß Hagen

Delphi-Quellcode:

type
  PIp = record // <- TYPEN fangen mit T an
    p1 : String;
    P2 : String;
    p3 : String;
    p4 : String;
    end; // <- Einrückungen, ein Block immer auf gleicher Höhe

type
MyIP = packed record // <- Einrückungen
  case Byte of
    0: (D,C,B,A : Byte);
    1: (dwValue : DWord);
  end;

function SplittIP(IP: string): PIp; // <- String ist eigener Type also S groß bei String
var
  I: Integer;
begin
  Result.p1 := '';
  Result.p2 := '';
  Result.p3 := '';
  Result.p4 := '';

  I := 0;
  repeat
    Inc(I, 1);
    if IP[I] <> '.then // <- Hier AV bei IP = ''
      Result.p1 := Result.p1+IP[I]; // <- Leerzeichen zwischen Operatoren, alles am + geklitscht
  until
     IP[I] = '.'; // <- eine Zeile höher, ist ja wohl nur schlecht
....
end;

function CreateIPPool(sStartIp, sEndIp: String): TStringList;
var
FromIP, ToIP, IP: MyIP; // <- Einrückungen
I: Integer;
Adress: PIp;
begin
  Result := TStringList.Create; // <- Allokation und Rückgabe von komplexen Datentypen sollte man vermeiden
                                 // besser ist es als Paramater Strings: TStrings zu übergeben damit der Aufrufer
                                 // der Funktion für die Datenhaltung verantwortlich bleibt.
  Adress := SplittIP(sStartIp);
  with FromIP do begin // <- begin markiert einen neuen Source/Formtierungs Block, gehört in die nächste
                                 // Zeile direkt unter das with.
    A := StrToInt(Adress.p1);
    B := StrToInt(Adress.p2);
    C := StrToInt(Adress.p3);
    D := StrToInt(Adress.p4);
    end;

  Adress := SplittIP(sEndIp);
  with ToIP do begin
    A := StrToInt(Adress.p1);
    B := StrToInt(Adress.p2);
    C := StrToInt(Adress.p3);
    D := StrToInt(Adress.p4);
    end;

  for I := FromIP.dwValue to ToIP.dwValue do begin // <- begin
    IP.dwValue := I;
    with IP do
      Result.Add(Format('%d.%d.%d.%d',[A,B,C,D]));
    end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#15

Re: IP Range

  Alt 20. Mär 2006, 07:21
Hai Luckie,

mal eine Frage zu deinen IPs.
Warum brauchst Du denn die Adressen aus zwei verschiedenen Netzen?
Du hast das Netz 192.168.2.0 und 192.168.5.0 die beiden haben doch nichts miteinaner zu tun.
Oder sollte das ganze nur ein Beispiel für deinen "PINGer" sein?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#16

Re: IP Range

  Alt 20. Mär 2006, 07:30
Zitat von negaH:
Begründung:
Hi Hagen,

meiner Meinung nach wird string NICHT mit einem großen S geschrieben. Bei delphi ist string ein keyword (wird ja auch fett gemacht), und keywords schreibt man nunmal klein...
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#17

Re: IP Range

  Alt 20. Mär 2006, 07:39
das ist tatsächlich eine Ansichtssache. Es ist ein Bezeichner und müsste klein geschrieben werden das stimmmt. Allerdings arbeite ich seit Borland Pascal 4.2 und orientiere mich immer an dem Stil der Borlandianer. Wobei man sagen muß das die letzten Entwicklungen im Hause Borlnd nicht mehr als Referenz dienen können da die Sourcen immer schlechter geworden sind.

Es geht mir aber hier garnicht um solche Kleinigkeiten. Am wichtigsten ist der Fakt das obige Funktion bei IP = '' eine Zugriffsschutzverletzung erzeugen muss !! Übrigens muß ich dazu nichtmal den Source testen, lesen reicht schon aus um dies zu sehen.

Sorry, ich möchte hier keinen Krieg anzetteln. Jeder soll nach seinen Ansprüchen seine privaten Source bauen können wie er es möchte. Allerdings ist dies hier ein Forum und viele Anfänger orientieren sich in ihrem Programmierstil an solchen Beispielen wir hier gezeigt. Es ist also in unser aller Interesse wenn wir Sourcecode-technisch hier in der DP ein hohes Niveau hinbekommen könnten.

Zb. die Angewohnheit das begin NICHT in einer eigenen Zeile einzurücken ist schätzungsweise höchsten 8-10 Jahre alt. Davor wurde immer das begin eingerückt, bzw. mir persönlich sind keine Sourcen bekannt vor dieser zeit die es nicht einrückten. Leider hat sich diese Unart sehr schnell verbreitet.

Ok back to topic now, and sorry Luckie.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#18

Re: IP Range

  Alt 20. Mär 2006, 07:56
Zitat von negaH:
TYPEN fangen mit T an
Stimmt. Ist ein Fehler von mir, weil ích halt auch nicht perfekt bin. Der Code ist noch aus ner alten Testphase wo ich noch mit Pointern spielte um zusehen was am Ende schneller ist.

Der Fainess halbe habe ich jetzt mal kurz das writeln gegen eine TStringList getauscht. Stimmt. Ich konnte die range innherhalb von 4547ms erzeugen. Ich muss aber dazu sagen das die CPU hier, wo ich grad bin etwas lahmer is als meiner da heim. Also könnte sie doch in etwas die Gleiche Effizienz haben.

Was die Zugriffsverletzung angeht: Habe ich bis heute nicht gesehen. Das Progie wo ich diesen Code reincomiliert habe läuft schon seit Monaten. Problemlos!
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

Re: IP Range

  Alt 20. Mär 2006, 08:28
@Sharky: Ja das ist ein Beispiel für mein Pi9ng Programm. Warum sollte man nicht gleich verschiedenen Netze damit durchpingen wollen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: IP Range

  Alt 20. Mär 2006, 10:06
Hallo Hagen,

Zitat von negaH:
ich weis, denke aber das Luckie das selber machen wollte und eventuell die Unit WinSocks nicht einlinken will.
stimmt, Luckie macht es manchmal gerne zu Fuß - aber wenn es um das Ping-Tool geht, da hat er WinSock eingebunden.

Zitat von negaH:
Ich persönlich vermeide es immer WinSocks einzulinken wenn es sich vermeiden lässt.
Das glaube ich dir, aber nicht jeder kann sich diese Haltung leisten. Ich arbeite in einem managed environment. Meine Zeit in der DP erwirtschafte ich z.B. durch den Aufruf von inet_addr() anstatt 30 Zeilen eigenen Code zu schreiben. Das drückt meine Lines-Of-Code und damit meine Fehlerrate. Oft bewundere ich deine Vorgehensweise, aber es gibt Bereiche abseits deines Spezialgebietes, in denen man andere Prioritäten setzen muss, damit man nicht abgestraft wird.

Du hast in deinem Beitrag #17 über den Vorbildcharakter von publizierten Quellen für Anfänger geschrieben. Gerade bei Anfängern beobachte ich eine gewisse Dankbarkeit für Hinweise, wie man mit dem Aufruf von wenigen System-Routinen eigenen, mit Schweiß und Tränen geschriebenen Code mehrerer Tage ersetzen kann.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz