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
Seite 2 von 3     12 3      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#11
  Alt 15. Mai 2003, 14:34
Bevor ich mich jetzt dran mache:

wie lautet denn deine IP-Adresse auf der du das getestet?

In deiner ersten Mail steht 192.168.2.x

in deiner letzten steht 192.168.0.x; Hast du womöglich mit meiner IP getestet?

Das bei der Timerlösung die letzte nicht mehr in Listbox2 auftaucht, ist logisch.

Setzt mal das i:=i+1 hinter die if-abfrage, dann wird die letzt auch getestet.
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
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#12
  Alt 15. Mai 2003, 18:51
Oh bin ich blöd, ja die Variante ohne Timer funkst jetzt!

Bei der mit Timer, sagt er das er die adress nit ändern kann während der Socket aktiv ist, weil er client1.close nit annimmt bzw. weil er den timer nit abschaltet!

[/delphi]

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Client1.host:='192.168.2.'+inttostr(i);
Try
Client1.Open;
If Client1.Socket.Connected then
Begin
Listbox1.Items.Add(Client1.Host);
client1.Close;
end
else
Begin
Listbox2.Items.Add(Client1.Host);
end;
finally
Client1.Close;
If i=105 then Timer1.Enabled:=false;
i:=i+1;
end;
end;

[delphi]

Das ist aber eigentlich egal weil die andere Variante, die die schöner ist funktioniert und dafür bin ich sehr dankbar!

Echt vielen Dank weil sonst wäre ich glaube ich nie dahinter gestiegen!

Thx

@wardz
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#13
  Alt 15. Mai 2003, 21:36
Ach ja ein Problem gibt es noch, was ich mir fast schon gedacht habe!

Da die IP ja x.x.x.x vier Stellen hat und ich also drei weitere Forschleifen davor geschaltet habe, wird der Pc überlastet.

Er sagt mir das der Puffer voll ist

Genau gesagt!

Windows socket error:Ein Socketvorgang konnte nicht ausgeführt werden, da dem System Pufferspeicher fehlte oder eine Warteschlange voll war
(10055), on API'connect'

Wie kann ich nach einer bestimmten Zeit den Speicher wieder freigeben!

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
i,c,b,a: Integer;
begin
  ListBox1.Clear;
  ListBox2.Clear;
  For a:=1 to 255 do
  Begin
   For b:=1 to 255 do
   Begin
     For c:=1 to 255 do
     Begin
       For i:=1 to 255 do
       begin
         Client1.host:='192.'+inttostr(b)+'.'+inttostr(c)+'.'+inttostr(i);
         Try
           Client1.Open;
           Application.ProcessMessages;
         if Client1.Socket.Connected then
         Begin
           ListBox1.Items.Add(Client1.Host);
           exit;
         end
         else
           //ListBox2.Items.Add(Client1.Host);
           Client1.Close;
         except
           beep;
         end;
       end;
       if Client1.Socket.Connected then
       Begin
         exit;
       end;
     end;
   end;
 end;
end;
Oder kann ich vielleicht 4 verschieden Proceduren anlegen, weil ja nach dem schliessen der Procedure der speicher wieder freigegeben wird?


Ich weiss das der scan bei mehr als 4 Millaren möglichkeiten vermutlich nie fertig wird aber ich wollte eine Eingrenzung später möglich machen!

Die Fehlermeldung kommt auch schon bei einem Spektrum von 192.168.1.1 bis 192.168.3.1 also ja nur 765 Möglichkeiten!

Gibs da vielleicht ne Möglichkeit?

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#14
  Alt 15. Mai 2003, 23:29
Was machst du denn damit? Für ein Chatprogramm schon etwas merkwürdig. Sieht mir eher wie ein Suchprog für offene Ports aus. Aber naja.

Du bist dir schon im Klaren, das wenn du die suche startest (im Internet), das du dann erstmal eine Kanne Kaffee kochen und dann auch trinken kannst, bis das fertig ist.

Aber gut, zurück zu deinem Problem. Ich schau mir das mal an. Mal sehen, was ich rauskriege.
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
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#15
  Alt 16. Mai 2003, 09:19
Mein Chatprogramm hat
Server-soll bei mir laufen
Client-soll bei diversen nutzern laufen!

Ip-scanner soll nun also meine IP für die Clients rausfinden, da ich ja keine static IP habe!

Kanne Kaffe is gut, ich habe ausgerechtet, das ich rund ein dreiviertel jahr brauche um alle IP's zu testen!

Naja ich weiss aber auch,das mein Provider unserem Router die IP's
von
213.146.1.1
bis
213.146.255.255

vergibt,was den Scan ja auf 255*255=65025 reduziert, jedoch kommt die Speicherüberlastung schon nach ungefähr 500 gescannten IP's!

Wenn ich das nu auf die Reihe bekomme, ist mein server immer erreichtbar
Eine Andere Möglichkeit wäre mein in eine Website zu integrieren,
jedoch weiss ich nit ob das so ohne Probleme geht, da ich bis jetzt nur
einfache Programme integriert habe wie Taschenrechner oder Counter!
Die sind ja nicht ständig aktiv, sondern werden von einem Betrachter der Website geöffnet!
Noch ein grund ist das es vielleicht Konflikte mit dem Port geben könnte, aber wie gesagt habe mich noch nicht damit befasst!

Danke im Vorraus!

@wardz
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#16
  Alt 16. Mai 2003, 09:28
Ich denke in deinem Fall kannst du das nur über UDP realisieren.

UPD ist ein Verbindungsloses Protokoll. D.h. du schickts einfach an jede IP ein UDP-Packet, nix wildes nur irgendein zeichen. Wenn dein Server dann so ein Zeichen empfängt, dann kann er ja per TCP eine Verbingung aufbauen, die IP hast du ja dann.
Nach Verbindungsaufbau hat der Client dann auch die Server-IP.

Wär das ne Idee ?
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
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#17

UDP

  Alt 16. Mai 2003, 12:49
Ja egentlich schon aber dann muss ich auf die TCP Komponente
umsteigen oder?

Wenn ja dann werde ich wohl das erstma in angriff nehmen und mein Programm umschreiben!

Thx
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#18
  Alt 16. Mai 2003, 17:19
Oder geht das nit auch vielleicht wenn ich den Clientsocket nach jeder 255 for-schleife freisetze und dann neu erzeuge? Habe ich vesucht aber ich glaube der übernimmt dann den Fehlercode 0 nit!

Delphi-Quellcode:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
a,b: Integer;
begin
  If client1.Active=false then
  Begin
    ListBox1.Clear;
    For b:=1 to 255 do
    Begin
     client1:=Tclientsocket.Create(self);
     client1.Close;
     client1.Port:=25555;
     client1.Socket.
     For a:=1 to 255 do
     begin
      Client1.host:='192.168.'+inttostr(b)+'.'+inttostr(a);
      Try
       Client1.Open;
       Application.ProcessMessages;
       if Client1.Socket.Connected then
       Begin
        ListBox1.Items.Add(Client1.Host);
        exit;
       end;
         client1.Close;
      except
        beep;
      end;
     end;
    end;
  end;
end;
Der schreit dann asynchron socket... aber das versteh ich nit!
Theoretisch müsste das doch geht, weiter der Speicher dann freigegeben wird wenn man das Objekt freisetzt oder?

Danke

@wardz
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#19
  Alt 16. Mai 2003, 21:43
Du folgendes erzeugt:

Code:
client1:=Tclientsocket.Create(self);
aber, wo ist das client1.free ?
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
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#20
  Alt 16. Mai 2003, 23:58
War vor dem Create vom Socket also:

Delphi-Quellcode:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
a,b: Integer;
begin
  If client1.Active=false then
  Begin
    ListBox1.Clear;
    For b:=1 to 255 do
    Begin
     client1.Free;
     client1:=Tclientsocket.Create(self);
     client1.Close;
     client1.Port:=25555;
     For a:=1 to 255 do
     begin
      Client1.host:='192.168.'+inttostr(b)+'.'+inttostr(a);
      Try
       Client1.Open;
       Application.ProcessMessages;
       if Client1.Socket.Connected then
       Begin
        ListBox1.Items.Add(Client1.Host);
        exit;
       end;
         client1.Close;
      except
        beep;
      end;
     end;
    end;
  end;
end;
Komisch is nur das der Fehler unregelmässig auftritt!
Mi F7 habe ich mehr mals probiert und bin bis 255 durch gelaufen wenn ich es langsam gemacht habe, wenn ich F7 gedrückt hielt, hin er sicht ca nach 10 Ip's auf!?

Vielleicht ist die Schleife zu schnell für das freigeben des Sockets?

???
  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 15:44 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