Autor Beitrag
Terra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 16.06.06 09:43 
Ich habe hier eine Procedure, die sich ja irgendwo selbst erklärt. Allerdingst hab ich da ein gewalltiges Problem:

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.BtnConnectClick(Sender: TObject);
var i: integer;
    antwort : array [0..99of string;

const ServerIP : array [0..1of string = ('127.0.0.1''80.70.60.50');

begin
  for i := 0 to 1 do begin
  ClientSocket.Host := ServerIP[i];
  ClientSocket.Port := 80;
  clientSocket.Open;
 if clientsocket.OnConnect(nil, clientsocket.Socket) = true then //was muss nach onConnect( hin ?
  begin
  ClientSocket.Close;
  antwort[i] := 'Connect OK!';
 end else
  begin
  ClientSocket.Close;
  antwort[i] := 'Connect Fehler!';
  end;
  sleep(200);
 end;
 suiDialogBox(1,' Information','Server 1: ' + antwort[1] + #13 +
                               'Server 2: ' + antwort[2]         );
end;


Was zum Kuckuck muss ich in der IF Anweisung reinschreiben, damit es funktioniert.
if clientsocket.OnConnect(nil, clientsocket.Socket) = true then ...
Ich bekomme mit dieser Anweisung eine Fehlermeldung. (Invalid Irgendwas)

Kann mir wer das richtig schreiben ???

Terra
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.06.06 09:49 
user profile iconTerra hat folgendes geschrieben:
Ich bekomme mit dieser Anweisung eine Fehlermeldung. (Invalid Irgendwas)

Kann mir wer das richtig schreiben ???

Wenn du die Fehlermeldung richtig hinschreiben kannst? Sorry, habe heute meinen witzigen Tag.
Ernsthaft: Ich habe jetzt keine Lust Delphi zu starten und beim clientsocket.onconnect nachzusehen, was der Rückgabewert und der Typ ist. Aber das dürfte theoretisch in der OH stehen. Ansonste nschreibe doch einfach die Fehlermeldung genau hin, dann ist meistens schon klar, was da hin muss.
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 16.06.06 10:28 
Das ist ja das Problem . .ich weis nicht mehr genau was Delphi geschrieben hat. Habe hier auf Schule kein Delphi und zu Hause kein Internet um schnell mal zu korrigieren. (Tolle kombination)

Die Fehlermeldung bezieht sich auf clientsocket.OnConnect(nil, clientsocket.Socket); um genau zu sein auf das clientsocket.socket.

Dort möchte er ein TCustomWinSocket haben. kann damit aber nichts anfangen.

onConnect(Sender: TObject; Socket:TCustomWinSocket); so in etwa wird onConnect gehändelt.

Terra
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Fr 16.06.06 10:37 
Soweit ich dich verstehe, soll das ein IP-Scanner sein?
Aber das OnConnect ereignis solltest du nicht provozieren, um zu schauen ob du verbunden bist.
Du könntest aber im onconnect ereignis mit try except versuchen einen Text an den Server zu senden.


Könnte so ausschaun:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure OnConnect(...);
begin
try
ClientSocket1.Socket.SendText('IP-Scanner Lookup');
antwort[i]:='Connect OK';
except
antwort[i]:='Connect Fehler';
end;
end;

procedure OnError(...);
begin
ErrorCode:=0;
end;


i und antwort müsstest du in den Private oder Public bereich setzen um procedure übergreifend damit arbeiten zu können.

MfG Fighter#1

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.06.06 10:39 
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.BtnConnectClick(Sender: TObject);
var i: integer;
    antwort : array [0..99of string;

const ServerIP : array [0..1of string = ('127.0.0.1''80.70.60.50');

begin
  for i := 0 to 1 do begin
  ClientSocket.Host := ServerIP[i];
  ClientSocket.Port := 80;
  clientSocket.Open;
 if clientsocket.active then 
  begin
  ClientSocket.Close;
  antwort[i] := 'Connect OK!';
 end else
  begin
  ClientSocket.Close;
  antwort[i] := 'Connect Fehler!';
  end;
  sleep(200);
 end;
 suiDialogBox(1,' Information','Server 1: ' + antwort[1] + #13 +
                               'Server 2: ' + antwort[2]         );
end;

Es gibt Tage ... *kopfschüttel*
OnConnect ist ein Ereignis und keine Methode, bzw. Funktion.
Um zu prüfen, ob die Verbindung besteht, musst du es nur so ändern, wie ich es um Source gemacht habe.
Ich habe die Änderung allerdings jetzt nicht geprüft.
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 16.06.06 10:44 
Achso ... danke.

Warum kann ich denn nicht mit den Funktionen (bzw. Ereignisse) arbeiten, wenn se mir aber angeboten werden? Verstehe ich nicht ganz. Hab so weit noch nicht gearbeitet, das mir das bewusst wäre.

Trotzdem vielen Dank für die Hilfen.


Achso @Fighter: Genau diese Version wollte ich ja eigentlich verhindern, da ich damit schwierigkeiten bekommen habe. Bin ja schon selbst erstaunt, das ich die Prozedure von mir fast ganz alleine hinbekommen habe ^^

Terra
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 16.06.06 10:48 
Das *kopfschüttel* war auf mich bezogen und nicht auf dich. :wink:
Das kann man schon. Nur die Methode, die du verwenden wolltest, ist keine Funktion und hat somit auch keinen Rückgabewert, den du abfragen könntest. Also kannst du es in einer If-Abfrage nicht verwenden. Du kannst es höchstens wie eine Prozedur verwenden.
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 16.06.06 10:58 
Zitat:
Das *kopfschüttel* war auf mich bezogen und nicht auf dich.

Wär auch nicht weiter schlimm gewesen. ^^

also wäre es dann möglich wenn ich das onConnect so verwende?

ausblenden Delphi-Quelltext
1:
clientsocket.onConnect := geheZuProdedureDieIrgendwasMacht;					


Liege ich da richtig?

Terra
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Fr 16.06.06 11:01 
ja

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Fr 16.06.06 11:08 
user profile iconFighter#1 hat folgendes geschrieben:
ja


^^ Danke.

So langsam verstehe ich den unterschied.

Terra
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 16.06.06 12:28 
Moin!

Nur der Vollständigkeit halber... ;)
user profile iconjasocul hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.BtnConnectClick(Sender: TObject);
var i: integer;
    antwort : array [0..99of string;

const ServerIP : array [0..1of string = ('127.0.0.1''80.70.60.50');

begin
  for i := 0 to 1 do begin
  ClientSocket.Host := ServerIP[i];
  ClientSocket.Port := 80;
  clientSocket.Open;
// das wird so nicht klappen, weil hier erst eine Ereignisverarbeitung
// stattfinden muss; also min. Application.ProcessMessages (ist eher Hack-Charakter)
// besser: auf ein OnConnect() oder OnError() warten, dann ist .Active erst gültig!
 if clientsocket.active then [...]


cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.