Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Netzwerk scannen mit Socket nicht möglich (https://www.delphipraxis.net/89866-netzwerk-scannen-mit-socket-nicht-moeglich.html)

famnig 7. Apr 2007 13:36


Netzwerk scannen mit Socket nicht möglich
 
Hallo!

Ich brauch mal eure Hilfe.
Ich versuche gerade ein Programm zu programmieren, welches ein Netzwerk nach einem anderen Programm scannt, welches dort als Host aktiv ist. Wenn es nun unter einer IP das Programm findet, soll es einen Vermerk in eine ListBox machen und weiter suchen, bis er bei 255 angelangt ist. Das suchende Programm ist der Client.

Bis jetzt hab ich folgendes zusammen:

Code:
procedure TForm21.Button1Click(Sender: TObject);
begin
 i:=1;
 Clientsocket1.Active:=false;
 Clientsocket1.Host:='192.168.0.'+inttostr(i);
 Label2.Caption:='192.168.0.'+inttostr(i);     //Anzeige der aktuellen IP
 Clientsocket1.Active:=true;
 Clientsocket1.open;
end;

procedure TForm21.hinzu(Sender: TObject; Socket: TCustomWinSocket);
begin
  Clientsocket1.Close;
  ListBox1.Items.Add('OK 192.168.0.'+inttostr(i));
  i:=i+1;
  Clientsocket1.Active:=false;
  Clientsocket1.Host:='192.168.0.'+inttostr(i);
  Label2.Caption:='192.168.0.'+inttostr(i);
  Clientsocket1.open;
end;

procedure TForm21.Fehler(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  if Errorcode=10049 then begin
    Clientsocket1.Close;
    ListBox1.Items.Add('XX 192.168.0.'+inttostr(i));
    i:=i+1;
    Clientsocket1.Active:=false;
    Clientsocket1.Host:='192.168.0.'+inttostr(i);
    Label2.Caption:='192.168.0.'+inttostr(i);
    Clientsocket1.open;
  end;
  Errorcode:=0;
end;
Bei Button1.Click wird gestartet, bei hinzu fügt er der Listbox ein OK hinzu mit IP, bei Fehler ein XX mit IP.
Leider hört er gleich am Anfang auf zu suchen. Wenn ich im localhost Adressbereich suche (127.0.0.*) gibt er mir einheitlich XX aus, obwohl ja die erste aktiv ist.

Ich hoffe mir kann jemand helfen. Bin am verzweifeln.

Muetze1 7. Apr 2007 13:40

Re: Netzwerk scannen mit Socket nicht möglich
 
Läuft denn der Server auch auf deinem lokalen Rechner oder nur auf einem fremden Rechner im LAN?

famnig 8. Apr 2007 10:48

Re: Netzwerk scannen mit Socket nicht möglich
 
Der Server läuft im Moment zusammen mit dem client in einem Programm auf meinem Rechner. Nur zu Testzwecken. Später will ich den server dann in ein anderes programm integrieren und den client da lassen.

Muetze1 8. Apr 2007 16:39

Re: Netzwerk scannen mit Socket nicht möglich
 
Ok, dann mal den Code durchgehen...

1. Active := true ist das gleiche wie Open
2. Ich empfehle eher Socket.Close aufzurufen anstatt das Close des ClientSockets.
3. Wenn 2. erfolgt (im Fehler wie auch im Erfolgsfall), dann im OnDisconnect den neuen Verbindungsversuch starten und nicht direkt von dem Event welches den Erfolg/Fehler meldet.
4. Im Fehlerfall (OnError) kannst du normalerweise mit dem Socket nichts mehr anfangen, also den Socket unabhängig vom Fehlercode einfach schliessen. Es macht da keinen Unterschied den Grund näher zu unterscheiden (ausser dem Nutzer aufzubereiten).
5. Dein Befüllen des Labels wie auch der ListBox ist mehrfach vorhanden. Schreib dir eine Methode welches dieses erledigt und einfach nur den aktuelle IP übergeben bekommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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