Jeg har snart brug mange timer på dette problem. Jeg har to programmer serveren og clienten. Jeg prøver et implamentere en funktion der kan sende filer fra serveren til clienten. Problemmet er at jeg kan godt sende små filer men når de bliver stører melder problemmerne sig. Clienten modtager og gemmer ikke de rigtige data :(.
Server: {sender med denne simple commando, strcom er stien til den pågældende fil.} userSocket.SendStream(TFilestream.Create( strcom, fmOpenRead or fmSharedenywrite));
Client: procedure filetranspro(socket:TCustomWinSocket); Var F : TFileStream; iLen, counter: Integer; Bfr: Pointer; begin F := TFileStream.Create(form1.Edsavepath.text, fmCreate); iLen := Socket.ReceiveLength; GetMem(Bfr, iLen); try while true do begin counter:=Socket.ReceiveBuf(Bfr^, iLen); if counter<=0 then break else F.WriteBuffer(Bfr^, counter); end; finally FreeMem(Bfr); freeandnil(f); end; end;
Client type er: ctNonBlocking.
Er der nogen der ved hvad jeg gør galt eller har en idee til hvordan man ellers kan overføre filer ved brug af client og server socket ?
Det er sikkert noget mere specifikt du er ude efter, men v.hj.a. en gratis component fra cgiexpert.com der kaldes httpgeneralengine kan du lave file upload med en kode som: unit FileUpload1D; interface
type TDataModule1 = class(TDataModule) GeneralHttpEngine1: TGeneralHttpEngine; procedure GeneralHttpEngine1ExecRequest(Sender: TObject); private { Private declarations } public { Public declarations } end;
var DataModule1: TDataModule1;
implementation
{$R *.DFM}
procedure TDataModule1.GeneralHttpEngine1ExecRequest(Sender: TObject); var Dest : String; begin // Produce the form for file upload PutLine('<HTML><HEAD><TITLE>CGI Expert FileUpload 1</TITLE></HEAD>'); PutLine('<BODY BGCOLOR=#F5F5F5><CENTER><H1>File upload example 1</H1>'); PutLine('<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="'+ScriptName+'">'); PutLine('<TABLE BGCOLOR=#F5F5F5>'); PutLine('<TR><TD>Upload the following file:</TD><TD><INPUT TYPE="FILE" NAME="FILE"></TD></TR>'); PutLine('<TR><TD COLSPAN=2 ALIGN=CENTER><INPUT TYPE=SUBMIT NAME="UPLOAD" VALUE="Upload the file">'); PutLine('<INPUT TYPE=RESET NAME=RESET VALUE="RESET"></TD><TR>'); PutLine('</TABLE>');
// Check for any fileupload if FormVar('FILE_FILENAME','')>'' then begin // Yes, a file has been uploaded
// Set destination filename on server Dest:=ExtractFileDir(ExeOrDllPath) + '\'+ExtractFileName(FormVar('FILE',''));
// Delete file if already exists if FileExists(Dest) then DeleteFile(Dest);
// Try to move the file to the directory of the if RenameFile(FormVar('FILE_FILENAME',''),Dest) then begin PutLine('<font color="green">The file "' + FormVar('FILE','') +'" on client, having type "' + FormVar('FILE_CONTENT_TYPE','')+'",'); PutLine('<BR> has successfully been saved on server.</font>'); end else PutLine('<font color="red">Failed to rename file:'+Dest+','+ FormVar('FILE','')+','+FormVar('FILE_FILENAME','')+ '</font>'); end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.