sever端:
WriteLn('OK '+IntToStr(Fs.Size)); //发送文件大小
OpenWriteBuffer;
FS.Position:= 0;
repeat
Application.ProcessMessages;
ct := Fs.Read(Fbuffer,4096);
WriteBuffer(Fbuffer,ct);
until (ct=0) or (not Connected);
CloseWriteBuffer;
FreeAndNil(Fs);
Disconnect;方法1 :( 为什么出不来进度条呢??)
client:
rt := readln;
Delete(rt,1,2);
repeat
Application.ProcessMessages;
ReadStream(Fs,-1,true);
ct := Fs.Size;
self.Gauge1.Progress := ct;//下载进度
until (not connected) or (ct >= StrToInt(rt));方法2:(这回有进度了,为什么总是到99%时报错socked disconnect gracefully)
client:
rt := readln;
Delete(rt,1,2);
repeat
Application.ProcessMessages;
readbuffer(Fbuffer,sizeof(Fbuffer));
ct := sizeof(Fbuffer);
self.Gauge1.Addprog(ct);//下载进度
until (not connected) or (ct=0) or (Fs.size >= StrToInt(rt));
WriteLn('OK '+IntToStr(Fs.Size)); //发送文件大小
OpenWriteBuffer;
FS.Position:= 0;
repeat
Application.ProcessMessages;
ct := Fs.Read(Fbuffer,4096);
WriteBuffer(Fbuffer,ct);
until (ct=0) or (not Connected);
CloseWriteBuffer;
FreeAndNil(Fs);
Disconnect;方法1 :( 为什么出不来进度条呢??)
client:
rt := readln;
Delete(rt,1,2);
repeat
Application.ProcessMessages;
ReadStream(Fs,-1,true);
ct := Fs.Size;
self.Gauge1.Progress := ct;//下载进度
until (not connected) or (ct >= StrToInt(rt));方法2:(这回有进度了,为什么总是到99%时报错socked disconnect gracefully)
client:
rt := readln;
Delete(rt,1,2);
repeat
Application.ProcessMessages;
readbuffer(Fbuffer,sizeof(Fbuffer));
ct := sizeof(Fbuffer);
self.Gauge1.Addprog(ct);//下载进度
until (not connected) or (ct=0) or (Fs.size >= StrToInt(rt));
AssignFile(FromF, TheFileName);
FileMode := 0;
Reset(FromF);
Seek(FromF, ThePosition);
except
try
CloseFile(FromF);
except
end;
Self.Terminate;
exit;
end;
try
FileLen := FileSize(FromF);
SysThread.Connection.WriteInteger(FileLen - ThePosition);
except
CloseFile(FromF);
Self.Terminate;
exit;
end; repeat
try
SysThread.Connection.OpenWriteBuffer;
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
SysThread.Connection.WriteBuffer(Buf, NumRead);
SysThread.Connection.CloseWriteBuffer;
except
CloseFile(FromF);
exit;
end;
until (NumRead = 0);
CloseFile(FromF);
//SysThread.Connection.Disconnect;
self.Terminate;
DownLoadTcp.Write('文件下载' + EOL); //1-------SendfileCMD
DownLoadTcp.Write(Edit3.Text + Edit1.Text + EOL); //2-------SendfileName
except
DownLoadTcp.Disconnect;
Animate1.Active := False;
beep;
Self.Caption := '提示:网络信息发送失败!';
exit;
end;
//TmpFName := Edit2.Text + '\' + Edit1.Text;
TmpFName := Edit2.Text + Edit1.Text;
//================================文件接续
try
if FileExists(TmpFName) then
begin
SaveFStream := TFileStream.Create(TmpFName, fmOpenReadWrite);
AlreadyReadLen := SaveFStream.Size;
end
else
begin
SaveFStream := TFileStream.Create(TmpFName, fmCreate);
AlreadyReadLen := 0;
end;
except
beep;
beep;
Self.Caption := '错误提示:请重新指定下载目录!';
exit;
end;
//===============================
try
DownLoadTcp.WriteInteger(AlreadyReadLen); //---send filePos文件位置
except
SaveFStream.free;
Animate1.Active := False;
DownLoadTcp.Disconnect;
Self.Caption := '错误提示:网络信息发送失败!';
exit;
end;
try
//iReturn := DownLoadTcp.ReadInteger;
RetStr := DownloadTcp.ReadLn(EOL);
except
SaveFStream.free;
DownLoadTcp.Disconnect;
Animate1.Active := False;
Self.Caption := '错误提示:远程网络断开,接收失败!';
exit;
end;
if RetStr = 'OK' then //------------------------读取接收标志
begin //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//读数据------------------------开始-----
try
ReadFileLen := DownLoadTcp.ReadInteger;
except
SaveFStream.free;
DownLoadTcp.Disconnect;
Animate1.Active := False;
Self.Caption := '错误提示:远程网络断开,接收失败!';
exit;
end;
SaveFStream.Position := SaveFStream.Size;
ProgressBar1.Max := ReadFileLen + AlreadyReadLen;
ProgressBar1.Position := 0;
try
DownLoadTcp.ReadStream(SaveFStream, ReadFileLen);
except
SaveFStream.Free;
Animate1.Active := False;
DownLoadTcp.Disconnect;
Self.Caption := '错误提示:远程网络断开,接收失败!';
exit;
end;
SaveFStream.free; //下载成功
Bitbtn3.Enabled := True;
beep;
Self.Caption := '下载完毕! 共:' + IntToStr(ProgressBar1.Max) + '字节';
ProgressBar1.Position := ProgressBar1.Max;
Sleep(100);
if Self.Tag = 1 then
// DelRemoteFile(Edit3.Text + Edit1.Text, Form1.IdFTCPClient);
DownLoadTcp.Disconnect;
Animate1.Active := False;
if checkBox1.Checked then Close;
exit;
end; //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DownLoadTcp.Disconnect; //
Self.Caption := '反馈提示:远程文件定位失败,连接断开!';
Animate1.Active := False;
Bitbtn1.Enabled := True;
exit;
end; //============================================================
beep;
Self.Caption := '提示:网络连接失败!';
谢谢,下面这样接收没法写进度呀!!(看我的题目,只是无法写进度,不是传输。)
try
DownLoadTcp.ReadStream(SaveFStream, ReadFileLen);
except
SaveFStream.Free;
Animate1.Active := False;
DownLoadTcp.Disconnect;
Self.Caption := '错误提示:远程网络断开,接收失败!';
exit;
end;
client:
rt := readln;
Delete(rt,1,2);
self.Gauge1.MaxValue:=strtoint(copy(rt,3,length(rt)));
self.Gauge1.Progress := 0;
repeat
Application.ProcessMessages;
ReadStream(Fs,-1,true);
ct := Fs.Size;
self.Gauge1.Progress := ct;//下载进度
until (not connected) or (ct >= StrToInt(rt));
rt := readln;
self.Gauge1.MaxValue:=strtoint(copy(rt,3,length(rt)));
self.Gauge1.Progress := 0;
Delete(rt,1,2);
repeat
Application.ProcessMessages;
ReadStream(Fs,-1,true);
ct := Fs.Size;
self.Gauge1.Progress := ct;//下载进度
until (not connected) or (ct >= StrToInt(rt));