![]() |
idTCPClient und idTCPServer
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:
-Empfangen:
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;
Delphi-Quellcode:
Beim 10-fachen Versenden habe ich einfach ne Integer-Variable erstellt, die von 1 bis 10 hochläuft.
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; Vielen Dank für Eure Mithilfe!! |
Re: idTCPClient und idTCPServer
dir ist schon klar, dass du beim verschicken immer die gleiche datei überschreibst!? vielleicht liegt es nicht an den indys - wovon ich ausgehe - sondern eher daran, dass kein zugriff auf die datei möglich ist. ich würde das mal testen und die ankommenden dateien jeweils in eigene dateien schreiben. was passiert dann!?
|
Re: idTCPClient und idTCPServer
ich bin vlei ein noob, aber ganz blöde och nich ^^
Delphi-Quellcode:
Es müssten die Dateien
function split(s:string; delimiter:string; part:integer):string;
var i:integer; begin result:=s; try if length(s)>2 then begin i:=1; while (s[i]<>delimiter) and (i<length(s)) do i:=i+1; if (i<length(s)) and (i>1) then if part=1 then result:=copy(s,1,i-1) else if part=2 then result:=copy(s, i+1,length(s)-i); end; except on e : exception do form1.memo1.lines.add('error in split-function '+e.message); end; end; function UniqueFileName(s:string):string; var i:integer; part1, part2:string; begin result:=s; try if fileexists(s) then begin part2:=reversestring(split(reversestring(s),'.',1)); part1:=reversestring(split(reversestring(s),'.',2)); i:=1; while fileexists(part1+'('+inttostr(i)+').'+part2) do i:=i+1; result:=part1+'('+inttostr(i)+').'+part2; end; except on e : exception do form1.Memo1.Lines.Add('error in function uniquefilename '+e.message); end; end; test.pdf test(1).pdf . . . test(9).pdf entstehen. Es entstehen aber nicht 10, sondern weniger (immer unterschiedlich viele) Dateien. Spannend ist auch, dass er eben 5 mal ins memo geschrieben hat, dass was kommt, aber nur 3 Dateien entstanden sind. |
Re: idTCPClient und idTCPServer
ConnectTimeout und ReadTimeout von den Standardwerten auf 1000 zu ändern, hat beide Probleme gelöst;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz