Hi allseits,
hin und wieder könnte man an Delphi/WIndows verzweifeln. Wenn immer es eine Möglichkeit gibt, dass triviale Dinge schief gehen, tun sie es auch.
Mein abgespeckter Code heute steckt in einem simplen
VCL Form, das einen TClientSocket beherbergt, und einen Button. Patscht man auf den Button, wird folgender Code angeschmissen:
Code:
procedure TClientMainForm.onReloadButtonClick(Sender: TObject);
begin
Try
if not ClientSocket.Active then // Socket öffnen
begin
ClientSocket.Port := StrToInt(ReadProgramConfig('CLIENTPORT'));
ClientSocket.Host := ReadProgramConfig('SERVER');
ClientSocket.Active := true;
end;
// Text senden
ClientSocket.Socket.SendText('###')
Except
on e:
Exception do
ShowMessage(e.ClassName + ' ' + e.Message);
End;
end;
ClientPort und Server liefern eine Port Nummer und eine
IP ADresse, auf der anderen Seite lauert eine TServerPort Komponente. Simpel genug, denke ich. Was passiert: drücke ich den Button, wird der Port auf dem Server geöffnet, aber die drei '#' verschwinden im Nirvana. Die
Exception triggert nicht. Drücke ich den Button nochmal (und auch jedes weitere Mal) kommen die drei '#' durch. Nehme ich die Abfrage auf .active raus, kommen die drei '#' nie durch, es wird lediglich serverseitig jedes Mal der Socket neu geöffnet.
Schätze konkret: in dem Durchlauf, in dem die Routine den Port öffnet, geht der darauffolgende SendText ins Nichts. Muss sie den Port nicht öffnen, weil ich schon mal auf den Button gedrückt hatte, klappt es.
Die nahgeliegende Frage: was mache ich falsch?
Gruss aus Bayern,
Armin.