Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy: Verbindung trotz Disconnect nicht geschlossen? (https://www.delphipraxis.net/79895-indy-verbindung-trotz-disconnect-nicht-geschlossen.html)

sECuRE 30. Okt 2006 16:58


Indy: Verbindung trotz Disconnect nicht geschlossen?
 
Hi,

ich entwickle momentan ein Programm, welches die Indy-Komponenten benutzt um Daten durchs Internet zu schicken. Die Wahl fiel nur auf die Indys, da sie SSL unterstützen und Quelloffen sind, ansonsten bin ich von ihnen leider nicht sehr begeistert, da ich irgendwie nicht damit klar komme...

Nun zum eigentlichen Problem: Bei mir läuft das Programm problemlos und beim Kunden sind irgendwann keine Internetverbindungen mehr möglich, das Programm meldet zuerst Connection refused, danach Timeout. Es scheint sich also der Router aufzuhängen.

Meine Vermutung ist nun, dass die Sockets nicht richtig zugemacht werden (das Programm macht für jede Datei einen auf, und davon sollen ca 500 versendet werden). In "netstat -an" werden sie definitiv noch als offen angezeigt, solange das Programm läuft.

Hier der entsprechende Sourcecode am Server:
Delphi-Quellcode:
procedure TServerForm.OnExecute(AThread: TIdThread);
begin
  // Weggelassen: Code um festzustellen, was für ein Request es ist
  HandleFileUpload(AThread);
  AThread.Connection.Disconnect;
end;
Und am Client:
Delphi-Quellcode:
FSocket.Disconnect;
FreeAndNil(FSocket);
Davor befinden sich einige ReadLn, WriteLn und WriteStream beziehungsweise ReadStream-Anweisungen auf beiden Seiten, sonst nichts. Der Socket wird folgendermaßen erzeugt:
Delphi-Quellcode:
function CreateSocket:TIdTCPClient;
begin
  result:=TIdTCPClient.Create(nil);
  with result do begin
    IOHandler:=TIdSSLIOHandlerSocket.Create(result);
    with TIdSSLIOHandlerSocket(IOHandler) do begin
      SSLOptions.Method:=sslvTLSv1;
      SSLOptions.Mode:=sslmClient;
      OnStatus:=SSLStatus;
    end;
    Host:=FHost;
    Port:=FPort;
  end;
end;
In netstat sieht das ganze dann so aus:
Code:
TCP   127.0.0.1:3001         127.0.0.1:1540         WARTEND
TCP   127.0.0.1:3001         127.0.0.1:1541         WARTEND
TCP   127.0.0.1:3001         127.0.0.1:1542         WARTEND
TCP   127.0.0.1:3001         127.0.0.1:1543         WARTEND
Woran kann das liegen / Was mache ich falsch?

Vielen Dank im Voraus und viele Grüße,
sECuRE

sECuRE 31. Okt 2006 13:07

Re: Indy: Verbindung trotz Disconnect nicht geschlossen?
 
Hi,

um das Thema nochmal zu pushen und mehr Informationen zu geben:
Es sieht so aus, als sei das ein Problem, das mit der Verwendung von SSL zusammenhängt. Ich kenn' mich leider zu wenig aus mit dem Indy-Sourcecode, aber beim Debugging konnte ich keinen Aufruf der Close-Methode des Binding-Objekts finden.

Danke & cu

TurboMartin 31. Okt 2006 14:07

Re: Indy: Verbindung trotz Disconnect nicht geschlossen?
 
Hast du denn auch beide DLLs (libssl32.dll oder so und noch ne andere) bei dir eingebunden in den Ordner? :gruebel:

sECuRE 31. Okt 2006 15:47

Re: Indy: Verbindung trotz Disconnect nicht geschlossen?
 
Hi,

ja, natürlich, sonst würde ja SSL gar nicht funktionieren. Die Übertragung an sich funktioniert, nur das Schließen der Verbindung nicht.

Da ich nun aber auf die Synapse-Units gestoßen bin, denke ich, dass ich die Indys komplett aus dem Projekt werfe. Synapse kann ebenfalls SSL und funktioniert bisher sehr unkompliziert und zuverlässig.

Danke & cu


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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