16. november 2003 - 17:53
Der er
4 kommentarer
fil overførsel ved brug af client og serversocket
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 ?
17. november 2003 - 07:01
#1
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
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
HttpEng, GenEng, HUtils;
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;
PutLine('</BODY></HTML>');
end;
end.