![]() |
Indy10 Filetransfer
Ich bin grad dabei einen file zwischen einem TCPserver und einem TCPclient zu transferieren. Jedoch freezt der client immer und ich weiß nicht warum.
Server
Delphi-Quellcode:
Client
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdCustomTCPServer, IdContext, IdTCPServer; type TForm1 = class(TForm) Button1: TButton; IdTCPServer1: TIdTCPServer; OpenDialog1: TOpenDialog; Memo1: TMemo; procedure IdTCPServer1Execute(AContext: TIdContext); procedure IdTCPServer1Connect(AContext: TIdContext); procedure Button1Click(Sender: TObject); procedure Log(Msg: String); procedure IdTCPServer1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Context: TidContext; implementation {$R *.dfm} procedure TForm1.Log(Msg: string); begin Memo1.Lines.Add('['+TimeToStr(now)+']'+Msg); end; procedure TForm1.Button1Click(Sender: TObject); var f: file of byte; begin if OpenDialog1.Execute then begin AssignFile(f,OpenDialog1.FileName); Reset(f); Log('Filename: '+ExtractFilename(OpenDialog1.FileName)); Context.Connection.IOHandler.WriteLn(ExtractFileName(OpenDialog1.FileName)); Log('Filesize: '+IntToStr(FileSize(f))); Context.Connection.IOHandler.WriteLn(IntToStr(FileSize(f))); Context.Connection.IOHandler.WriteFile(Opendialog1.FileName,true); Log('File transfered'); end; end; procedure TForm1.IdTCPServer1Connect(AContext: TIdContext); begin Context:=AContext; Button1.Enabled:=true; end; procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); begin //handle end; end.
Delphi-Quellcode:
Filename und filesize werden richtig übertragen. Der file auf der clientseite ist auch immer genauso groß wie der auf der serverseite, jedoch ist die datei nicht vollständig und der client freezt in der markierten zeile. Der server läuft komplett durch
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient; type TForm1 = class(TForm) IdTCPClient1: TIdTCPClient; Button1: TButton; SaveDialog1: TSaveDialog; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure IdTCPClient1Connected(Sender: TObject); procedure Log(msg: String); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Log(msg: string); begin Memo1.Lines.Add('['+TimeToStr(now)+']'+msg); end; procedure TForm1.Button1Click(Sender: TObject); var fs: TFileStream; size: Integer; begin idTCPClient1.Connect; SaveDialog1.FileName:=Form1.IdTCPClient1.IOHandler.ReadLn(); Log('Received filename: '+SaveDialog1.FileName); if SaveDialog1.Execute then begin fs:=TFileStream.Create(savedialog1.FileName,fmCreate); Log('Saving file to '+ExtractFilename(SaveDialog1.FileName)); end; size:= StrToInt(Form1.IdTCPClient1.IOHandler.ReadLn()); Log('Filesize '+IntToStr(size)); idTCPClient1.IOHandler.ReadStream(fs,size); //hier Log('File received'); fs.Free; Log('File released'); end; procedure TForm1.IdTCPClient1Connected(Sender: TObject); begin Log('Connected'); end; end. MfG - Ghost007 |
Re: Indy10 Filetransfer
*PUSH*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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