Autor Beitrag
drstar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 79
Erhaltene Danke: 2

Windows 8.1/x64
Delphi 10.1
BeitragVerfasst: So 25.03.12 21:44 
So, ich habe mich hier schon durchgewühlt, aber leider nichts gefunden, was mir bei meinem Problem helfen würde.

Ich benutze Delphi 7 und die mitglieferten Indys (müßte Version 9 sein)

Konkret geht es darum, daß ich nen WHS 2011 im Einsatz habe, den ich aber nur laufen lassen will, wenn er gebraucht wird, sprich mindestens ein Client nach ihm "ruft".
Gelöst habe ich das über Standby und Wake-On-LAN (Magic Packet).

Soweit kein Problem, der Server wacht auf und legt sich auch schlafen nach gewisser Inaktivität der Clients.

Nur beim Connecten mit der IdTCPClient-Komponente gibt es ein Problem. Wenn diese den Connect probiert und der Server nicht antwortet, gibt es eine Exception (die ich abfange), der Grund für den Fehlschlag soll egal sein. Nun möchte ich, daß ich als Nutzer einen erneuten Verbindungsversuch unternehmen kann, doch den macht die Indy nicht mehr. Hier Code-Ausschnitte:

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:
Procedure WakeServer;
begin
  // Magic Packet verschicken, funktioniert, deshalb Code weggelassen
end;


Procedure IndyConnect;
begin
  ConnectStatus_Label.Caption := 'Verbindungsversuch zum Server...';
  Timer2.Interval := 30000;
  OK := chr(strtoint('$55')) + chr(strtoint('$AA'));
  if not IdTCPClient1.Connected
  then
  begin
    with IdTCPClient1 do
    begin
      try
        Host := IP;
        Port := 81;
        connect(3000);
        if Connected
        then
        begin
          writeln(OK);
          ReadIN := IdTCPClient1.ReadLn(#$A3000);
          if ReadIN = OK
          then
          begin
            ConnectStatus_Label.Caption := 'Verbindung zum Server hergestellt';
            Unit1.Connected := true;
          end;
        end;
      except
        on E : EIdConnectTimeout do
        begin
          ConnectStatus_Label.Caption := 'Verbindung zum Server konnte nicht hergestellt werden (Timeout)';
          Unit1.Connected := false;
        end;
        on E : EIdException do
        begin
          ConnectStatus_Label.Caption := 'Verbindung zum Server konnte nicht hergestellt werden (Netzwerk nicht erreichbar)';
          Unit1.Connected := false;
        end;
      end;
    end;
  end
  else
  begin
    IdTCPClient1.WriteLn(OK);
  end;
end;


In dieser Procedure bleibt er hängen, wenn ich es erneut probiere, nachdem das Connect fehlgeschlagen ist. Eine Exception tritt nicht mehr auf. Wo liegt der Fehler? Oder gibt es einen Workaround für dieses Problem?

Moderiert von user profile iconMartok: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Titel erweitert.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 25.03.12 22:23 
Moin!

user profile icondrstar hat folgendes geschrieben Zum zitierten Posting springen:
In dieser Procedure bleibt er hängen,
Was heißt hängen bleiben? In welcher Zeile "hängt" was genau? Ggfs. Breakpoints setzen und mit dem Debugger durchsteppen oder ein Log schreiben. So kommen wir nicht weiter. :nixweiss:

cu
Narses

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