AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Socket-Verbindung herstellen ohne zu blockieren
Thema durchsuchen
Ansicht
Themen-Optionen

Socket-Verbindung herstellen ohne zu blockieren

Ein Thema von Medium · begonnen am 7. Mai 2018 · letzter Beitrag vom 11. Mai 2018
 
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#12

AW: Socket-Verbindung herstellen ohne zu blockieren

  Alt 8. Mai 2018, 15:32
Danke für die Infos!

Ich habe hier jetzt leider ein großes Problem: Mein Socket im Thread will sich nicht verbinden, aber ein TClientSocket, der als Komponente auf meinem Formular liegt und exakt dieselben Settings hat kann dies ohne Probleme. Hier mal mein Thread:

Delphi-Quellcode:
constructor TSocketProbeThread.Create(aSocket: TClientSocket; aPauseTime: Integer);
begin
  inherited Create(false);
  FIP := aSocket.Host;
  FPort := aSocket.Port;
  FPauseTime := aPauseTime;
  FCS := TCriticalSection.Create;
end;

procedure TSocketProbeThread.Execute;
begin
  inherited;
  repeat
    FCS.Enter;
    try
      if not Assigned(FSocket) then
      begin
        FSocket := TClientSocket.Create(nil);
        FSocket.OnError := SocketError;
        FSocket.Host := FIP;
        FSocket.Port := FPort;
        FSocket.ClientType := ctNonBlocking;
      end;
      if (not FSocket.Active) then
      begin
        try
          FSocket.Active := true;
        except;
          Sleep(100);
        end;
      end;
    finally
      FCS.Leave;
    end;
    Sleep(FPauseTime);
  until Terminated;
end;
(Das Sleep(100) im except-Zweig ist nur für mich zum Haltepunkt setzen.)

Das Programm läuft ohne jeden Fehler zu generieren "FSocket.Active := true;" durch, aber .Active ist danach weiterhin false. Es wird weder der Except-Zweig betreten, noch wird OnError ausgelöst, und der Thread wird auch nicht weggeschossen. Er läuft brav weiter und versucht im gesetzten Intervall (10s im Moment) Active zu setzen, aber es bleibt einfach immer false. Ohne Fehler ohne alles.

Nehme ich den Socket, den ich im Create als Datenspender übergebe, welcher auf meinem Formular liegt, verbindet dieser sich sofort und ohne Probleme. Was mache ich hier falsch jetzt?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz