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