Einzelnen Beitrag anzeigen

Nimral

Registriert seit: 21. Sep 2005
18 Beiträge
 
#1

Trivialproblem beim Öffnen eines TClientSocket

  Alt 18. Jun 2015, 22:33
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.

Geändert von Nimral (18. Jun 2015 um 22:47 Uhr)
  Mit Zitat antworten Zitat