Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   TidHTTP-Komponente bringt Socket Error 57: Socket is not connected (https://www.delphipraxis.net/176300-tidhttp-komponente-bringt-socket-error-57-socket-not-connected.html)

RWarnecke 26. Aug 2013 04:35


TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
 
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.

arnof 26. Aug 2013 10:59

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
 
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);

arnof 26. Aug 2013 11:03

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
 
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.

RWarnecke 26. Aug 2013 11:10

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

Zitat von arnof (Beitrag 1226227)
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.

Zitat:

Zitat von arnof (Beitrag 1226226)
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 ?

mjustin 26. Aug 2013 12:57

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

Zitat von RWarnecke (Beitrag 1226228)
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?

Delphi-Quellcode:
FIdHTTPClient.ProtocolVersion := pv1_0;
?

arnof 26. Aug 2013 13:06

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
 
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!

RWarnecke 26. Aug 2013 17:21

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
 
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 ?

arnof 26. Aug 2013 19:55

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

Zitat von RWarnecke (Beitrag 1226287)
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...

RWarnecke 27. Aug 2013 05:15

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
 
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.

RWarnecke 28. Aug 2013 07:16

AW: TidHTTP-Komponente bringt Socket Error 57: Socket is not connected
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.
Seite 1 von 2  1 2      

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