![]() |
Socket Fehler 10051. Im Thread Verbindung aufbauen.
hi,
habe mir eine Client / Server Anwendung geschrieben. Weis nicht wie ich es anders Programmieren soll. Habe da einen Thread. Der in etwa so aufgebaut ist.
Delphi-Quellcode:
Wenn die While Schleife ein paar mal durchgelaufen ist bekomme ich diese Meldung
repeat
begin if not client.active then begin client.close; client.open; while not client.socket.connected do begin sleep(1); client.active := true; application.processmessage; end; end until Terminated; end; Zitat:
Sobald die Verbindung zum Server nicht mehr steht. Soll der Client versuchen die Verbindung wieder auf zubauen. Kommt vom Ping kein Pong zurück Active = false. Wird der Server beendet Active = false. Vielleicht hat ja jemand noch eine Idee. thx |
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
Du bist in einem Thread? Dann funktioniert das so nicht. Du brauchst eine Messageschleife. Und auf Application darfst du gleich gar nicht zugreifen.
|
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
ok das application.processmessage kann ich ja weg lassen.
client ist eine private Variable vom Thread die ich später vor aufruf des Thread zu weise. stehe gerade auf dem Schlauch :gruebel: |
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
Client ist ja anscheinend eine Socket-Komponente. Diese benutzt i.A. ein (unsichtbares) Fenster. Deswegen musst du:
|
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
so sieht mein Thread objekt aus
Delphi-Quellcode:
TClientConnectorThread = class(TThread)
private fCS : TCriticalSection; fClient : TClientSocket; public Procedure SetClientData(Client : TClientSocket); protected Procedure Execute; override; end; //... procedure TClientConnectorThread.SetClientData(Client: TClientSocket); begin fClient := Client; end; procedure TClientConnectorThread.Execute; begin inherited; fCS := TCriticalSection.Create; //while true do repeat begin if not fClient.Active then begin fCS.Enter; fClient.Close; fClient.Open; fClient.Active := true; while not fClient.Socket.Connected do begin sleep(1); fClient.Active := true; application.ProcessMessages; end; fCS.Leave; end; sleep(1); end until Terminated; fCS.Free; end; |
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
oder ich müste den Thread so umschreiben, das er den verbindungsaufbau und das Senden / Empfangen übernimmt, oder?
|
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
Zitat:
Die Frage ist, ob du die Komponente nicht schon so einstellen kannst, dass sie intern einen Thread verwendet. Meines Wissens macht sie das sogar automatisch. |
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
aber die Sockets bauen keine Verbindung automatisch auf, wenn diese getrennt wurde.
Daher muss ich ja die Verbindung überwachung und in einen Thread auslagern, oder? Habe nur bedenken und zwar, der Server vekommt vom Client ein Befehl "MacheWas". Der Server fürt den Befehl aus. Da die Methode "MachWas" aber länger braucht können keine Daten vom Client mehr empfangen werden. Deswegen wollte ich das in einen Thread auslagern. So das die Daten die gesendet werden sollen in einen Thread geschrieben werden und die daten die Empfangen werden auch in einen Thread geschrieben werden. So kann die Anwendung andere Dinge erledigen und im Hintergrund sendet und empfängt ein Thread. Für Ideen bin ich jeder Zeit offen. |
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
Ja, lager es in einen Thread aus. Ich weiß es jetzt auch nicht besser (wenn es überhaipt etwas besseres gäbe).
aber dein oben geposteter Thread klappt so nicht.
|
Re: Socket Fehler 10051. Im Thread Verbindung aufbauen.
ok werde meine Client komplett in einen Thread auslagern.
Was aber muss ich mit getmessage für eine Nachricht abfangen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz