![]() |
Indy TCPclient Disconnect Problem
Hi,
folgender Ausgangspunkt (Indy10) ich habe eine Form mit einem Programm1 TCPserver(Port 1700) und TCPclient(Port 1701) die sich zu einem 2ten program mit ebenfalls Programm2 TCPclient (Port 1700) und TCPserver (Port 1701) verbinden sollen soweit so gut den server starte ich jeweils automatisch bei Programmstart dann connecte ich die clients per button
Delphi-Quellcode:
jetzt das Problem:
procedure TForm1.BTconnectClick(Sender: TObject);
begin if TCPclient.Connected=false then begin TCPClient.Create.Host := '127.0.0.1'; TCPClient.Create.Port := 1701; // beim 2ten Prog Port 1700 TCPClient.create.Connect; end else begin TCPClient.Disconnect; end; end; Client disconnect funktioniert serverseitig ohne probleme ABER der client denkt weiterhin er ist connected - sprich jeder versuch wieder zu connecten schlägt fehl... wenn ich den connect über einen 2ten button versuche, dann kommt die meldung das der client bereits connected wäre - was er aber definitiv nicht ist Bin im Moment völlig ratlos.. Danke Ralf |
Re: Indy TCPclient Disconnect Problem
Dieses Problem habe ich auch. Wäre schön, wenn jemand eine Lösung wüsste.
|
Re: Indy TCPclient Disconnect Problem
Hi,
habe gerade das Problem gefunden... ich habe einen timer der auf Messages vom Server reagieren soll...
Delphi-Quellcode:
und das "TCPClient.iohandler.ReadLn('', 5);" scheint die connection clientseitig
procedure TForm1.TimerGetMessageTimer(Sender: TObject);
var Msg, MsgStr : String; MsgCom : Integer; begin // wenn nicht connected if not TCPClient.Connected then exit; Msg := TCPClient.iohandler.ReadLn('', 5); if Msg<>'' then begin MsgCom :=strtoint(Msg[1]); MsgStr :=trim(Msg); delete(MsgStr,1,1); case MsgCom of stERROR : begin end; stMessage : begin MemoAdd(MsgStr); end; end; end; end; am leben zu halten... Lösung:
Delphi-Quellcode:
Tschö
procedure TForm1.BTconnectClick(Sender: TObject);
begin if TCPclient.Connected=false then begin TCPClient.Create.Host := '127.0.0.1'; TCPClient.Create.Port := 17125; TCPClient.create.Connect; timergetmessage.Enabled:=true; end else begin timergetmessage.enabled:=false; TCPClient.Disconnect; end; end; Ralf @Florian Bernd: ich glaube wir sind die einzigen die mit Indy10 herumexperimentieren... |
Re: Indy TCPclient Disconnect Problem
Danke für die Antwort. Ich werd's gleich mal testen.
Zitat:
Florian |
AW: Indy TCPclient Disconnect Problem
Hallo zusammen,
ich muss den doch schon relativ alten Beitrag noch einmal aufgreifen. Ich versuche mich wechselnd auf mehrere Arduinos connecten. Daher ist es wichtig, dass die Verbinung jedesmal gesichert getrennt wird. Folgender Test:
Delphi-Quellcode:
try
Mainform.TCPClient1.host:='192.168.1.177'; Mainform.TCPClient1.Port:=23; Mainform.TCPClient1.Connect; Mainform.TCPClient1.IOHandler.WriteLn(#13); sleep(100); for i:=1 to 5 do Begin x:= IntTostr(i mod 2); Mainform.TCPClient1.IOHandler.WriteLn('setport #'+ (edit1.text)+','+x ); sleep(100); end; showmessage('Fertig'); finally Mainform.TCPClient1.Disconnect; end; Parallel dazu habe ich mal die beiden Events OnConnected und OnDisconnected belegt, welche auch beide aufgerufen werden:
Delphi-Quellcode:
Trotzdem, wird beim 2 Aufruf von Mainform.TCPClient1.Connect eine Exception geworfen, die sagt, dass die Verbindung bereits bestehen würde (EIdAlreadyConnected - Verbindung besteht bereits).
procedure TMainform.TCPClient1Connected(Sender: TObject);
begin Showmessage('Connected'); end; procedure TMainform.TCPClient1Disconnected(Sender: TObject); begin showmessage('Disconnected'); end; Ist diese Version ungeschickt, oder das Ergebnis ein Bug? Ich verwende Delphi 10.1 Berlin Starter in der Standard-Installation (Indy 10.1.5 ?). Vielen dank für jede Hilfe! |
AW: Indy TCPclient Disconnect Problem
Hallo zusammen,
ich habe noch ein wenig experimentiert, jedoch keine Lösung gefunden, solange ich den TCPClient über die VCL einfüge. Abhilfe hat jedoch geschafft, wenn ich ihn dynmaisch zur Laufzeit erstelle:
Delphi-Quellcode:
So lässt sich die Prozedur zumindest mehrmals hintereinander ausführen, was andersrum nicht möglich war. Das könnte zwar nun eine Lösung sein, mich würde aber trotzdem interessieren, ob ich im esten Beispiel einen Fehler hatte, oder ob dies tatsächlich ein Bug ist.
procedure TMainform.Button3Click(Sender: TObject);
var TCPClient2: TIdTCPClient; i:integer; x:string; begin try TCPClient2:=TIdTCPClient.Create(nil); TCPClient2.host:='192.168.1.177'; TCPClient2.Port:=23; TCPClient2.Connect; TCPClient2.IOHandler.WriteLn(#13); sleep(100); for i:=1 to 5 do Begin x:= IntTostr(i mod 2); TCPClient2.IOHandler.WriteLn('setport #'+ (edit1.text)+','+x ); sleep(100); end; showmessage('Fertig'); finally TCPClient2.Free; end; end; |
AW: Indy TCPclient Disconnect Problem
Versuch' es mal bitte mit
Delphi-Quellcode:
TCPClient1.Disconnect(True);
Hatte mit TIDHttp auch Probleme. Nachdem ich hier im Forum irgendwo gelesen hatte, dass man Disconnect doch bitte mit Parameter Disconnect(True) aufrufen möge, hab' ich das geändert und seit dem keine Probleme mehr. Vorher musste ich entweder das Programm nach 'nem Fehler neu starten oder halt bei jedem Aufruf 'ne neue Instanz von TIDHTTP herstellen und anschließend freigeben. |
AW: Indy TCPclient Disconnect Problem
Hallo Stephan,
keine Änderung...die Fehlermeldung kommt noch immer. |
AW: Indy TCPclient Disconnect Problem
Moin...:P
Zitat:
Delphi-Quellcode:
...aber das Create gehört vor das try. :thumb:
try
TCPClient2:=TIdTCPClient.Create(nil); |
AW: Indy TCPclient Disconnect Problem
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz