AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
Thema durchsuchen
Ansicht
Themen-Optionen

TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

Ein Thema von RWarnecke · begonnen am 26. Aug 2013 · letzter Beitrag vom 4. Okt 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 05:35
Hallo zusammen,

in meiner iOS App rufe ich verschiedene RSS-Feeds über die Komponente TidHTTP ab. Das funktioniert auch soweit sehr gut. Wenn ich jetzt die App schlafen lege, also über den Home Knopf beende und die App dann nach ein paar Minuten zum Beispiel wieder neu starte und den Refresh Button für die RSS Feeds anklicke, bekomme ich den Fehler Socket Error 57: Socket is not connected. Dieser Fehler kommt sporadisch.

Wie kann ich diesen Fehler beseitigen ? Hier noch der Aufruf :
Delphi-Quellcode:
  try
    Xml := IdHTTP.Get(Url);
  except
    on E: Exception do
    begin
      ShowMessage ('Error: ' + E.Message);
      Exit;
    end;
  end;
In URL steht die Adresse, die Aufgerufen werden soll. Ich habe die Komponente TidHTTP nur auf das Formular gelegt und mehr nicht.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 11:59
so komische Probleme habe ich bei den Indydingern auch immer!

Meine Lösung, ich versuche die Verbindung zu trennen vor einer neuen Abfrage:


if IdHTTP1.Connected then IdHTTP1.Disconnect;

IdHTTP1.Get('http://........',TempStream);
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 12:03
Zur diesen Thema, habe ich gerade das gesehen:


http://www.delphifeeds.com/go/f/1072...hiFeeds.com%29

Der fängt das Problem aber auch nicht ab, sondern zeigt nur die message.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 12:10
Zur diesen Thema, habe ich gerade das gesehen:

http://www.delphifeeds.com/go/f/1072...hiFeeds.com%29

Der fängt das Problem aber auch nicht ab, sondern zeigt nur die message.
Den Teil mit idHTTP habe ich ja von dort übernommen. Nur leider kommt hier genau in dem Exception-Block die Fehlermeldung.

so komische Probleme habe ich bei den Indydingern auch immer!

Meine Lösung, ich versuche die Verbindung zu trennen vor einer neuen Abfrage:

if IdHTTP1.Connected then IdHTTP1.Disconnect;

IdHTTP1.Get('http://........',TempStream);
Das würde ja heißen, dass das Get einen automatischen Connect herstellt und danach nicht immer sauber schließt oder ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 13:57
Das würde ja heißen, dass das Get einen automatischen Connect herstellt und danach nicht immer sauber schließt oder ?
Das wäre ganz normal bei einer HTTP 1.1 Verbindung. Daher vermute ich auch dass die Verbindung ihr Sockethandle nicht mehr benutzen kann, nachdem die Anwendung inaktiv war.

Kann man das eventuell verwenden um HTTP 1.0 zu erzwingen?

FIdHTTPClient.ProtocolVersion := pv1_0; ?
Michael Justin
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 14:06
Also ich habe mal ein kleines Prg gemacht, das die aktuelle IP überwacht und bei Veränderungen der Ip automatisch bei no-ip.com die neue IP setzt da die tollen Vodafonerouter nur dyndns supporten. Da das für LTE gemacht worden ist, kam es vor das mal die Internetverbindung weg war und dann hat es bei meinem Programm auch gerappelt und die Indykomponente hat die Arbeit verweigert, auch wenn wieder ein Netz da ist!

Mit den Trennen der Verbindung habe ich eine stabiles Laufzeitverhalten, was vorher nicht der Fall war!
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 18:21
Hallo zusammen,

danke für eure Antworten. Ich habe das ganze jetzt noch ein bisschen anders gelöst. Nach meiner Meinung die sauberste Methode :
Delphi-Quellcode:
  IdHTTP := TIdHTTP.Create;
  try
    try
      Xml := IdHTTP.Get(Url);
    except
      on E: Exception do
      begin
        ShowMessage ('Error: ' + E.Message);
        Exit;
      end;
    end;
  finally
    IdHTTP.Free;
  end;
Gibt es noch einen besseren Weg ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 26. Aug 2013, 20:55
Hallo zusammen,

danke für eure Antworten. Ich habe das ganze jetzt noch ein bisschen anders gelöst. Nach meiner Meinung die sauberste Methode :
Delphi-Quellcode:
  IdHTTP := TIdHTTP.Create;
  try
    try
      Xml := IdHTTP.Get(Url);
    except
      on E: Exception do
      begin
        ShowMessage ('Error: ' + E.Message);
        Exit;
      end;
    end;
  finally
    IdHTTP.Free;
  end;
Gibt es noch einen besseren Weg ?
Ob das die sauberste Lösung ist darf ich mal bezweifeln !

Du bist nicht mehr auf einem Rechner und .free funktioniert hier ganz anders als man denkt. Schau mal das dein Speicher nicht volläuft bei intensiver Benutzung...
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 27. Aug 2013, 06:15
Also, ich habe das ganze jetzt mal ausprobiert und mit Instruments kontrolliert.
Delphi-Quellcode:
  IdHTTP := TIdHTTP.Create;
  try
    try
      Xml := IdHTTP.Get(Url);
    except
      on E: Exception do
      begin
        ShowMessage ('Error: ' + E.Message);
        Exit;
      end;
    end;
  finally
    IdHTTP.Free;
  end;
Delphi-Quellcode:
  IdHTTP := TIdHTTP.Create;
  try
    try
      Xml := IdHTTP.Get(Url);
    except
      on E: Exception do
      begin
        ShowMessage ('Error: ' + E.Message);
        Exit;
      end;
    end;
  finally
    IdHTTP := nil;
  end;
Diese beiden Versionen nehmen sich nicht viel, was den Speicherverbrauch angeht. Hier wird bei jedem Aufruf immer so um die 700 bis 800 KB auf den gerade verbrauchten Speicherplatz dazu addiert.
Delphi-Quellcode:
  try
    if IdHTTP.Connected then
      IdHTTP.Disconnect;
    strXml := IdHTTP.Get(strUrl);
  except
    on E: Exception do
    begin
      ShowMessage ('Error: ' + E.Message);
      Exit;
    end;
  end;
Bei dieser Variante läuft das ganze etwas langsamer ab. Die Komponente liegt auf der Form und wird nur einmal beim Start der Anwendung initialisiert. Hier sind es durchschnittlich 500 bis 600 KB beim verbrauchten Speicher dazu addiert.

Die Verbrauchsangaben beziehen sich auf die komplette Ausführung des Programms und nicht nur auf die oben genannten Codebeispiele.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#10

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected

  Alt 28. Aug 2013, 08:16
Den Socket Error beim Schlafen legen der App mit der Home-Taste habe ich beseitigt, mit der dritten Variante aus meinem letzten Beitrag. Jetzt merke ich gerade, wenn die Anwendung noch offen ist und das iOS Gerät gesperrt wird, egal ob mit dem Ein-/Aus-Schalter oder durch die Automatische Sperre und ich danach das Gerät wieder entsperre und dann auf den Refresh-Button drücke, bekomme ich den Socket Error 57 wieder.

Was habe ich hier vergessen ? Die Komponente liegt auf der Form und wird nicht zur Laufzeit erstellt.
Rolf Warnecke
App4Mission
  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 22:10 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