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:
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 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(#$A, 3000); 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 Martok: Code- durch Delphi-Tags ersetzt
Moderiert von Narses: Titel erweitert.