So, ich habe jetzt mal einen neuen Thread aufgemacht, weil der alte thematisch nicht mehr wirklich dazu passt:
Ich verschicke eine Datei von der Client zur Server Komponente.
Folgende Probleme treten dabei auf:
1.) Wenn die Komponenten auf/in unterschiedlichen Forms/Units, aber in der gleichen Anwendung sind UND die Datei größer als 1 Packet ist, hängt er sich weg. Dies war gestern noch nicht so und ich habe nichts geändert - Wieso ist das so?
2.) Ich habe die Client-Komponente in eine 2. Anwendung ausgelagert und verschicke besagte Datei nun 10 mal. Dies habe ich gemacht, um zu sehen, ob die indys automatisch für jede eingehende Clientverbindung einen Thread erstellen. Und es scheint so zu sein, ABER:
Von den 10 "Versuchen", speichert er die Datei manchmal 3 mal, manchmal 4 mal, manchmal 6 mal und manchmal 8 mal (das waren die 4 Fälle, die bisher aufgetreten sind), statt genau 10 mal - Wieso ist das so?
hier mal der Code:
-Versenden:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
ms:TMemoryStream;
strFolder:
string;
strFileName:
string;
begin
strFolder:='
H:\Src\';
strFileName:='
test.pdf';
ms:=TMemoryStream.create;
ms.LoadFromFile(strFolder+strFileName);
try
if not idtcpclient1.Connected
then
idtcpclient1.Connect;
try
idtcpclient1.Socket.
write(ms,0,true);
//hier bleibt er stehen
finally
idtcpclient1.Disconnect;
end;
ms.Free;
except
memo1.Lines.Add('
fehler bei indy-client');
end;
end;
-Empfangen:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
ms: TMemoryStream;
SizeOfIncomingStream: Integer;
strFolder:
string;
strFileName:
string;
begin
memo1.Lines.Add('
es kommt was');
try
strFolder:='
H:\Ziel\';
strFileName:='
test.pdf';
ms := TMemoryStream.Create;
with AContext.connection
do
begin
try
SizeOfIncomingStream := Socket.ReadInteger;
Socket.ReadStream(ms, SizeOfIncomingStream);
finally
Disconnect;
end;
end;
except
memo1.Lines.Add('
fehler bei indy-server');
end;
ms.SaveToFile(uniquefilename(strfolder+strfilename));
ms.Free;
end;
Beim 10-fachen Versenden habe ich einfach ne Integer-Variable erstellt, die von 1 bis 10 hochläuft.
Vielen Dank für Eure Mithilfe!!