Autor Beitrag
Anarkids
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81

Win XP Pro, Freundin
Delphi 2006, C/C++, VisualBasic
BeitragVerfasst: Fr 17.03.06 12:04 
Wäre nett von euch, wenn ihr ihn finden könntet. ich bin zu n00b dafür glaub ich!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.Button1Click(Sender: TObject);
 var Sock: TTCPClient;
 var i; integer;
begin
 i := 0;
 ports[1] := '80';
 ports[2] := '443';
 ports[3] := '110';
 ports[4] := '119';
 ports[5] := '21';

 repeat
 Sock := TTCPClient.Create(self);
 Sock.RemoteHost := edit1.text;
 Sock.RemotePort := ports[i];
 
 if Sock.OnConnect = true then //Fehler: Nicht genügend wirkliche Parameter
  memo1.lines.add('blablablalbalblaba irgendwas funktioniert');
 
 if Sock.OnError = True then
  memo1.lines.add('Dienst funktioniert nicht');

 Sock.Active := True;
 Application.ProcessMessages;
 Sock.Active := False;
 Sock.Free;
 until i = 6;
end;



Moderiert von user profile iconChristian S.: Topic aus Sonstiges (Delphi) verschoben am Fr 17.03.2006 um 11:06
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 17.03.06 12:08 
Wäre natürlich hilfreich, wenn Du uns verrätst, wie der Fehler lautet :zwinker:

Aber ich denke, es wäre zumindest schonmal eine gute Idee, die Variable i in der repeat-until-Schleife auch zu verändern, sonst bleibt sie bei Null und die Schleife wird zur Endlos-Schleife.

//edit: Okay, vergiss das Erste ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".


Zuletzt bearbeitet von Christian S. am Fr 17.03.06 12:08, insgesamt 1-mal bearbeitet
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 17.03.06 12:08 
Erster Ansatz, Deine Schleife läuft von 0 bis 6

Ports hast Du aber nur von 1-5


Setz mal i := 1 und until i =5

und in der Schleife inc(i);
Dann sollte das Laufen;

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 17.03.06 12:10 
Zitat:
aber ich denke, es wäre zumindest schonmal eine gute Idee, die Variable i in der repeat-until-Schleife auch zu verändern, sonst bleibt sie bei Null und die Schleife wird zur Endlos-Schleife.
oder sie gleich durch eine for-Schleife ersetzten. In diesem Fall weiß man ja wie oft sie wiederholt werden soll.

_________________
Markus Kinzler.
Anarkids Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81

Win XP Pro, Freundin
Delphi 2006, C/C++, VisualBasic
BeitragVerfasst: Fr 17.03.06 12:15 
user profile iconmkinzler hat folgendes geschrieben:
Zitat:
aber ich denke, es wäre zumindest schonmal eine gute Idee, die Variable i in der repeat-until-Schleife auch zu verändern, sonst bleibt sie bei Null und die Schleife wird zur Endlos-Schleife.
oder sie gleich durch eine for-Schleife ersetzten. In diesem Fall weiß man ja wie oft sie wiederholt werden soll.


*kopf auf den tisch hau*
das hatte ich glatt vergessen. ja guter rat mit der for schleife, aber das problem ist ja nich die schleife, sondern die Abfrage.

thx :)
Grishnak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 221

Windows XP Home
Delphi 7 PE, Delphi 2005 PE
BeitragVerfasst: Fr 17.03.06 12:21 
TTCPClient.OnConnect ist vom Typ TSocketNotifyEvent (= procedure (Sender: TObject) of object)!

Du musst dir eine Methode vom diesem Typ schreiben und sie .OnConnect zuweisen. Wenn die Verbindng zustande kommt, wird dann diese Methode aufgerufen.

_________________
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
mikhal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109

Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
BeitragVerfasst: Fr 17.03.06 12:24 
Ich kenne die TTCPClient-Klasse nicht, aber schau mal in Zeile 17 deines Quelltextes:
ausblenden Delphi-Quelltext
1:
if Sock.OnConnect = True then					


Handelt es sich hierbei um einen Methodenaufruf? Ein Methodenaufruf einer Ereignismethode wird dir kein Boole'sches Ergebnis liefern!

Laut Delphi 7 Hilfe solltest du mal die Eigenschaft Connected für deinen Test heranziehen.

Grüße
Mikhal

_________________
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 17.03.06 12:24 
Oh ja, bei OnError ist das selbe Problem !

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 17.03.06 12:25 
onConnect/onError ist eine Prozedur-Properties, die kannst du so nicht aufrufen. Denen kannst du nur Ereignisroutienen zuweisen, welche dann beim connect bzw bei einem Fehler aufgerufen wird.

Du mußt also für diese beiden Ereignisse Methoden in der Klasse implementiern und dem Event zuweisen.

_________________
Markus Kinzler.
Anarkids Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81

Win XP Pro, Freundin
Delphi 2006, C/C++, VisualBasic
BeitragVerfasst: Fr 17.03.06 12:25 
also z.B. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.Button1Click(Sender: TObject);
 var Sock: TTCPClient;
 var i; integer;
begin
 i := 0;
 ports[1] := '80';
 ports[2] := '443';
 ports[3] := '110';
 ports[4] := '119';
 ports[5] := '21';

 repeat
 Sock := TTCPClient.Create(self);
 Sock.RemoteHost := edit1.text;
 Sock.RemotePort := ports[i];

 Sock.OnConnect := Connect; //METHODEN-
 Sock.OnError := Error;     //AUFRUF

 Sock.Active := True;
 Application.ProcessMessages;
 Sock.Active := False;
 Sock.Free;
 until i = 6;
end;
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 17.03.06 12:27 
Hatte ich Dir in diesem Thread doch schon mal gezeigt !

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Grishnak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 221

Windows XP Home
Delphi 7 PE, Delphi 2005 PE
BeitragVerfasst: Fr 17.03.06 12:34 
Nein, so war es nicht gedacht!

Was willst du eigentlich bezwecken? Bei einem gegebenen Host (Edit1.Text) die fünf Ports "belauschen"? Warum Erstellst du dafür 5 Sockets nacheinander und gibst sie jeweils wieder frei? Würde es nicht reichen, einfach den Port zu ändern?

Naja, schreib erst mal, was du bezwecken willst, dann sehen wir weiter...

[edit]Ich denke, der Link von user profile iconchrisw dürfte genau das sein, was du suchst![/edit]

_________________
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
Anarkids Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81

Win XP Pro, Freundin
Delphi 2006, C/C++, VisualBasic
BeitragVerfasst: Fr 17.03.06 12:38 
sicher, sorry!

War mir net klar, dass man das Zeug nich per IF-Abfrage klären kann. Du hattest mir ja auch diesen Teil mitgegeben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.ActiveConnection (Sender: TObject);
begin
 ShowMessage('Connected');
end;


deinen Teil habe ich dann so ergänzt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.ActiveConnection (Sender: TObject);
 var Sock1: TTCPClient;
begin
 var Sock1 := Dummy; //Dummy ist global, er übergibt Sock
 memo1.lines.add(Sock1.RemoteHost +'blablablablablaaaaa');
end;

das sollte in Verbindung mit der Schleife und dem Array wirken. Tut es aber nicht.

Bin echt ziemlich Hilflos, weil ich mir immer denke, dass ich kurz vor dem Ziel bin :(

thx schonmal für eure Geduld und Hilfe ;-)
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 17.03.06 12:39 
Lass mal das var bei var Sock1 := Dummy; //Dummy ist global, er übergibt Sock weg.
Aber eigentlich kannst du ja dann gleich mit dummy arbeiten und die lokale Variable ganz weglassen!

_________________
Markus Kinzler.
Grishnak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 221

Windows XP Home
Delphi 7 PE, Delphi 2005 PE
BeitragVerfasst: Fr 17.03.06 12:41 
"Sender" ist der Socket, der das Ereignis auslöst! Einfach per type-cast umwandeln, dann kannst du dir "dummy" sparen.

_________________
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
Anarkids Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81

Win XP Pro, Freundin
Delphi 2006, C/C++, VisualBasic
BeitragVerfasst: Fr 17.03.06 12:41 
sorry mein fehler, das steht da gar net drin. is mehr nen tipfehler...
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 17.03.06 12:56 
Hier mal mein Beispiel aus dem vorherigen Thread für mehrere Ports

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    TcpClient1: TTcpClient;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure ActiveConnection (Sender : TOBject);
    procedure SocketError (Sender : TObject; SocketErr: Integer);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Sock : TTCPClient;
    ports : array [1..5of String;
    i : Integer;
begin
  Ports[1] := '80';
  Ports[2] := '119';
  Ports[3] := '21';
  Ports[4] := '110';
  Ports[5] := '443';
  Sock := TTCPClient.Create(self);
  Sock.RemoteHost := '127.0.0.1';
  for i := 1 to 5 do
  begin
    Sock.RemotePort := Ports[i];
    Sock.OnConnect := ActiveConnection;
    Sock.OnError := SocketError ;
    Sock.Active := True;
    Application.ProcessMessages;
    Sock.Active := False;
  end;
  Sock.Free;
end;

procedure TForm1.ActiveConnection (Sender : TOBject);
begin
  Showmessage('Connected');
end;

procedure TForm1.SocketError(Sender : TObject; SocketErr: Integer);
begin
  Showmessage('Port ' + (Sender as TTCPClient).RemotePort + ' ist nicht auf');
  //Das nennt man TypeCasting
end;
end.

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Anarkids Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81

Win XP Pro, Freundin
Delphi 2006, C/C++, VisualBasic
BeitragVerfasst: Fr 17.03.06 12:57 
also ich hab jetzt einfach Sock global gemacht und die sowieso überflüssigen vars rausgenommen.

wie mach ich das denn, dass sich nur der port ändert. weil du hattest schon recht, mehr will ich auch nicht machen. ich hab nur keinen plan, wie's funktioniert :)

das ist so deprimierend
Grishnak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 221

Windows XP Home
Delphi 7 PE, Delphi 2005 PE
BeitragVerfasst: Fr 17.03.06 13:02 
Ich würde noch
ausblenden Delphi-Quelltext
1:
2:
Sock.OnConnect := ActiveConnection;
Sock.OnError := SocketError ;

aus der Schleife raus nehmen und direkt unter
ausblenden Delphi-Quelltext
1:
Sock.RemoteHost := '127.0.0.1';					

schreiben, da diese Zuweisungen ja nur einmal vorgenommen werden müssen!

_________________
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
Anarkids Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 81

Win XP Pro, Freundin
Delphi 2006, C/C++, VisualBasic
BeitragVerfasst: Fr 17.03.06 13:06 
*g* danke leute. jetz hab ich immerhin schonma ne endlosschleife. das is toll ;-)

thx thx thx thx!!!