AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Socket Komponente im XE4 <-> Indy TCPClient XE7
Thema durchsuchen
Ansicht
Themen-Optionen

Socket Komponente im XE4 <-> Indy TCPClient XE7

Ein Thema von Alex_ITA01 · begonnen am 26. Feb 2015 · letzter Beitrag vom 27. Feb 2015
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#1

AW: Socket Komponente im XE4 <-> Indy TCPClient XE7

  Alt 26. Feb 2015, 21:57
Stimmt, eine Zeile im Code fehlt.
Nämlich das
with TCPClient do Das steht ganz außen rum.
Du hast Recht, in der XE7 Variante habe ich vor dem IOHandler das TCPClient extra stehen. Das ist aber überflüssig und lässt sich auch compilieren.
Die vielen Exception Behandlungen habe ich nur reingemacht um festzustellen, wo es knallt.

Die XE4 Variante geht bei mir und den anderen beiden Rechnern ohne Probleme.
Nur die XE7 mit der eingesetzten Indy Komponente macht teilweise Probleme.
Was mich hat total wundert, warum bekomme ich beim "WriteLn" eine Exception die heißt, Verbindung erfolgreich geschlossen?
Ich wollte doch gar nicht schließen...
Hoffe ihr habt noch paar Ideen.

Viele Grüße

Edit für die XE7 Variante:
Ich habe die TIdTCPClient Komponente auf einem Formular sitzen und habe einen IOHandler als Komponente auch mit auf das Formular gesetzt. Dann habe ich bei der TCPClient Komponente den IOHandler entsprechend im Objektinspektor verknüpft.
Hat es vielleicht damit etwas zu tun?

Laut deinem Source weißt du ja gar keinen IOHandler zu!?
Let's fetz sprach der Frosch und sprang in den Mixer

Geändert von Alex_ITA01 (26. Feb 2015 um 21:59 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Socket Komponente im XE4 <-> Indy TCPClient XE7

  Alt 26. Feb 2015, 22:13
Ich habe die TIdTCPClient Komponente auf einem Formular sitzen und habe einen IOHandler als Komponente auch mit auf das Formular gesetzt. Dann habe ich bei der TCPClient Komponente den IOHandler entsprechend im Objektinspektor verknüpft.
Hat es vielleicht damit etwas zu tun?

Laut deinem Source weißt du ja gar keinen IOHandler zu!?
Indy erzeugt den Standard IOHandler selbst, er muss nicht zugewiesen werden. (Ausnahmen sind SSL-IOHandler.)

Wenn die Gegenseite die Verbindung "sauber" schliesst, und danach ein Lesezugriff (oder Schreibzugriff) aus dem IOHandler auf die Verbindung stattfindet, wird Indy dies mit einer Exception melden. Was genau geschieht läßt sich man am einfachsten im Debugger nachvollziehen.
Michael Justin
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#3

AW: Socket Komponente im XE4 <-> Indy TCPClient XE7

  Alt 27. Feb 2015, 08:10
Delphi-Quellcode:
  try
    TCPClient.Connect;
    TCPClient.IOHandler.WriteLn(MyStr1);
    TCPClient.IOHandler.WriteLn(MyStr2);
    TCPClient.Disconnect;
  except
    on E: Exception do
    begin
      // log Exception
    end;
  end;
Habe es jetzt mal genauso hintereinander weg geschrieben wie du und jetzt bekomme ich auf dem Rechnern wo es vorher nicht ging folgende Exception:

Exception: Verbindung besteht bereits.

Allerdings erst beim zweiten Sendeversuch.
Ich vermute der Server trennt die Verbindung nicht richtig oder?

Mit der XE4 Komponente funktioniert es allerdings. Die verhält sich also irgendwie anders.

Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.211 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Socket Komponente im XE4 <-> Indy TCPClient XE7

  Alt 27. Feb 2015, 09:46
Was für ein Zufall, die gleiche Frage hatte ich gestern (ebenfalls XE7) auch: Ich sage auf einem TidTCPClient Disconnect() und danach liefert Connected() immer noch True .

Ich bin da kein Profi, weiß aber noch, dass bei TCP das Schließen der Verbindung im gegenseitigen Abmelden besteht. Ich werde also wahrscheinlich irgendein Event benutzen müssen wann die Verbindung wirklich zu ist.
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#5

AW: Socket Komponente im XE4 <-> Indy TCPClient XE7

  Alt 27. Feb 2015, 10:31
Dann gehts nicht nur mir so

Mich wundert nur, dass der XE4 Source funktioniert, ohne dass ich an dem Server etwas geändert habe. Da scheint also die Verbindung "sauber" getrennt zu werden...
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Socket Komponente im XE4 <-> Indy TCPClient XE7

  Alt 27. Feb 2015, 12:50
Mich wundert nur, dass der XE4 Source funktioniert, ohne dass ich an dem Server etwas geändert habe. Da scheint also die Verbindung "sauber" getrennt zu werden...
Den aktuellen Verbindungsstatus kann man auf Systemebene mit netstat oder TCPView kontrollieren. Als erste Maßnahme um halboffene Verbindungen bei zweiter und weiterer Verwendung, auszuschliessen würde ich die TIdTCPClient Komponente nicht auf dem Formular ablegen, sondern nur im Source dynamisch erzeugen (wie in meinem Beispiel).
Michael Justin

Geändert von mjustin (27. Feb 2015 um 12:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:10 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