AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Die Variable ServerIP herausfinden!(Scannen)
Thema durchsuchen
Ansicht
Themen-Optionen

Die Variable ServerIP herausfinden!(Scannen)

Ein Thema von ATwardz · begonnen am 12. Mai 2003 · letzter Beitrag vom 19. Mai 2003
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1
  Alt 14. Mai 2003, 23:44
Ich habe jetzt mal was Ausprobiert.
Hier mein Code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets, ExtCtrls, ScktComp, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    ClientSocket1: TClientSocket;
    BitBtn1: TBitBtn;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    i: Integer;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     ClientSocket1.Address:='192.168.0.'+inttostr(i);
     Try
     ClientSocket1.Open;
     if ClientSocket1.Active then begin
      ListBox1.Items.Add(ClientSocket1.Address);
      ClientSocket1.Close;
     end else
      ListBox2.Items.Add(ClientSocket1.Address);
     finally
     ClientSocket1.Close;
     i:=i+1;
     if i=21 then timer1.Enabled:=False;
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     i:=1;
     Timer1.Enabled:=true;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
    //ListBox2.Items.Add(ClientSocket1.Address);
    ErrorCode:=0;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
     //ListBox1.Items.Add(ClientSocket1.Address);
     //ClientSocket1.Close;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i: Integer;
begin
     ListBox1.Clear;
     ListBox2.Clear;
     For i:=1 to 20 do begin
      ClientSocket1.Address:='192.168.0.'+inttostr(i);
      Try
       ClientSocket1.Open;
       Application.ProcessMessages;
       if ClientSocket1.Socket.Connected then
        ListBox1.Items.Add(ClientSocket1.Address)
       else
        ListBox2.Items.Add(ClientSocket1.Address);
       ClientSocket1.Close;
      except
        beep;
      end;
     end;
end;

end.
Wenn du den Button1 benutzen willst, dann muß du die Auskommentierung unter OnError und OnConnect wieder rausnehmen.

Aber mir ist dabei ein Phänomen aufgefallen:

die Timer-Lösung funktioniert richtig (Gefällt mir aber nicht)

die BitBtn-Lösung liefert erst ab dem 2. Klick die richtige IP-Adresse.
Eigentlich müsste das schon beim 1. Klick so sein. Liegt warscheinlich daran, das beim Open nicht wirklich gewartet wird, bis die Verbindung aufgebaut ist. Und wenn das dann zu lange dauert, wird eine IP ausgegeben, die nicht stimmt, da die Schleife schon weiter ist.

Also folgende Lösung sollte dann aber auch das Problem lösen.
Du setzt eine Globale Booleanvariable 'test' auf False.
Nach dem Open läßt du dann eine While-Schleife laufen, die auf ein test=True wartet.
Im OnConnect und OnError setzt du die dann auf True.
Dann geht das aufwärtzählen der IP nur weiter, wenn die Open-Procedure abgeschlossen ist. So oder so.

Zur Sicherheit kannst du dann ja noch einen Timer mit einem Timeout von 30 Sek vor der While-Schleife starten, der auf jeden Fall Test auf True setzt.

Probier das doch mal.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:35 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-2025 by Thomas Breitkreuz