AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy TCPclient Disconnect Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Indy TCPclient Disconnect Problem

Ein Thema von th_bone · begonnen am 6. Dez 2005 · letzter Beitrag vom 10. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2      
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#1

Indy TCPclient Disconnect Problem

  Alt 6. Dez 2005, 10:36
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:
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;
jetzt das Problem:

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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Indy TCPclient Disconnect Problem

  Alt 6. Dez 2005, 11:40
Dieses Problem habe ich auch. Wäre schön, wenn jemand eine Lösung wüsste.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Indy TCPclient Disconnect Problem

  Alt 6. Dez 2005, 12:28
Hi,

habe gerade das Problem gefunden...

ich habe einen timer der auf Messages vom Server reagieren soll...

Delphi-Quellcode:
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;
und das "TCPClient.iohandler.ReadLn('', 5);" scheint die connection clientseitig
am leben zu halten...

Lösung:

Delphi-Quellcode:
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;
Tschö

Ralf

@Florian Bernd: ich glaube wir sind die einzigen die mit Indy10 herumexperimentieren...
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Indy TCPclient Disconnect Problem

  Alt 6. Dez 2005, 12:37
Danke für die Antwort. Ich werd's gleich mal testen.

Zitat:
ich glaube wir sind die einzigen die mit Indy10 herumexperimentieren...
Kann durchaus sein.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#5

AW: Indy TCPclient Disconnect Problem

  Alt 7. Mär 2017, 21:31
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:
procedure TMainform.TCPClient1Connected(Sender: TObject);
begin
Showmessage('Connected');
end;

procedure TMainform.TCPClient1Disconnected(Sender: TObject);
begin
showmessage('Disconnected');
end;
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).

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!
MFG
Steffen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#6

AW: Indy TCPclient Disconnect Problem

  Alt 8. Mär 2017, 17:29
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:
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;
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.
MFG
Steffen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Indy TCPclient Disconnect Problem

  Alt 8. Mär 2017, 19:15
Versuch' es mal bitte mit  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.
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#8

AW: Indy TCPclient Disconnect Problem

  Alt 8. Mär 2017, 19:47
Hallo Stephan,

keine Änderung...die Fehlermeldung kommt noch immer.
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#9

AW: Indy TCPclient Disconnect Problem

  Alt 9. Mär 2017, 06:43
Moin...
Zitat:
Abhilfe hat jedoch geschafft, wenn ich ihn dynmaisch zur Laufzeit erstelle
...das ist auch die einzige Variante die funktioniert. Sowas hatte ich auch mal. (dunkel in Erinnerung)
Delphi-Quellcode:
try
  TCPClient2:=TIdTCPClient.Create(nil);
...aber das Create gehört vor das try.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Indy TCPclient Disconnect Problem

  Alt 9. Mär 2017, 08:00
mich würde aber trotzdem interessieren, ob ich im esten Beispiel einen Fehler hatte, oder ob dies tatsächlich ein Bug ist.
Wenn es tatsächlich Indy 10.1.5 ist, dann ist es eine sehr alte Version, die einen Bug enthalten könnte. Aktuell ist schon seit langer Zeit Indy 10.6.*
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:39 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