![]() |
Re: IP Range
Guten Morgen.
Kennt denn keiner mehr die Standard-Routinen inet_addr() und inet_ntoa() aus der Unit WinSock? Nachdenkliche Grüße vom marabu |
Re: IP Range
Zitat:
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 |
Re: IP Range
Gut mir ging es damals bei der Entwicklung nur rein um Geschwindigkeit ;-)
|
Re: IP Range
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; |
Re: IP Range
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? |
Re: IP Range
Zitat:
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... |
Re: IP Range
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 |
Re: IP Range
Zitat:
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! |
Re: IP Range
@Sharky: Ja das ist ein Beispiel für mein Pi9ng Programm. Warum sollte man nicht gleich verschiedenen Netze damit durchpingen wollen? ;)
|
Re: IP Range
Hallo Hagen,
Zitat:
Zitat:
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz