亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ubreakpoint.pas

?? 斷點續傳的整理演示代碼 斷點續傳的整理演示代碼
?? PAS
字號:
unit UBreakPoint;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, ExtCtrls, FileCtrl, IniFiles;

type
  TBufChar = array [0..4095] of Char;
  TBufByte = array [0..4095] of Byte;

type
  TfrmBreakPoint = class(TForm)
    ClientSocket1: TClientSocket;
    pnlMain: TPanel;
    edtHostAddr: TEdit;
    btnStartDownload: TButton;
    edtSaveFile: TEdit;
    btnGetHeadInfo: TButton;
    btnStopDownload: TButton;
    Label2: TLabel;
    Label3: TLabel;
    lblStatusInfo: TLabel;
    Memo1: TMemo;
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure btnStartDownloadClick(Sender: TObject);
    procedure edtHostAddrChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure edtSaveFileChange(Sender: TObject);
    procedure btnGetHeadInfoClick(Sender: TObject);
    procedure btnStopDownloadClick(Sender: TObject);
    procedure edtHostAddrClick(Sender: TObject);
  private
    procedure MessageInfo(SetInfo: string);
    { Private declarations }
  public
    { Public declarations }
    LocalFileName: string;    {本地文件名}
    ServerFileName: string;   {服務器端文件名}
    ServerHost: string;       {服務器地址}
    IsRev: Boolean;           {是否可以接收}
    IsStop: Boolean;          {是否停止}
  end;

var
  frmBreakPoint: TfrmBreakPoint;
  RecDownPoint: Longint; //上次下載到的位置

implementation

{$R *.dfm}

{取得應用程序路徑}
function GetAppPath: string;
begin
  Result := ExtractFilePath(Application.ExeName);
end;
{接收一行數據 Socket,超時,結束符}
function SocketRevLine(Socket: TCustomWinSocket; TimeOut: Integer; EndStr: string = #13#10): string;
var
  bufInfo: TBufChar;
  i: Integer;
  strStream: TStringStream; {保存所有的數據}
  FSocketStream: TWinSocketStream;
begin
  strStream := TStringStream.Create('');
  FSocketStream := TWinSocketStream.Create(Socket, TimeOut);
  while Socket.Connected do
  begin
    {確定接收的超時,可見WaitForData的源碼}
    if not FSocketStream.WaitForData(TimeOut) then Break;
    ZeroMemory(@bufInfo, SizeOf(bufInfo));
    {每次只讀一個字符,以免讀入了命令外的數據}
    i := FsocketStream.Read(bufInfo, 1);
    if i = 0 then Break;
    strStream.Write(bufInfo, i);
    if pos(EndStr, strStream.DataString) <> 0 then Break;
  end;
  Result := strStream.DataString;
  {沒有讀到回車換行符,就表示有超時錯,這時返回空字符串}
  if Pos(EndStr, Result) = 0 then Result := '';
  strStream.Free;
  FSocketStream.Free;
end;

function GetHost(Input: string): string;
begin
  Input := Trim(Input);
  if pos('http://', LowerCase(Input)) = 1 then
  begin
    Input := Copy(Input, Length('http://') + 1, Length(Input));
  end;
  if pos('/', Input) <> 0 then
  begin
    Input := Copy(Input, 0, pos('/', Input) - 1);
  end;
  Result := Input;
end;

function GetFile(Input: string): string;
begin
  Input := Trim(Input);
  if pos('http://', LowerCase(Input)) = 1 then
  begin
    Input := copy(Input, Length('http://') + 1, Length(Input));
  end;
  if pos('/', Input) <> 0 then
  begin
    Input := Copy(Input, pos('/', Input) + 1, Length(Input));
  end;
  Result := Input;
end;

procedure TfrmBreakPoint.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TfrmBreakPoint.btnStartDownloadClick(Sender: TObject);
var
  URLAppPath: string;
  BufInfo: TBufByte;
  Rec: Longint;
  TempFile: File;
  cmd1: string; //這一行的內容
  RecLen, RealRecLen: LongInt; //服務器返回的長度;實際已經收到的長度
  value1:string; //標志們的值
  TotalLen: LongInt; //數據總長
begin
  if Trim(edtHostAddr.Text) = '' then Exit;
  try
    AssignFile(TempFile, LocalFileName);
    IsRev := False;
    IsStop := False;
    if FileExists(LocalFileName) then
    begin
      ReSet(TempFile, 1);
      RecDownPoint := FileSize(TempFile);
    end
    else
    begin
      ReWrite(TempFile, 1);
      RecDownPoint := 0;
    end;
    Seek(TempFile, RecDownPoint);
    ClientSocket1.Active := False;
    ClientSocket1.Host := GetHost(edtHostAddr.Text);
    ClientSocket1.Port := 80;
    URLAppPath := '';
    ServerFileName := GetFile(edtHostAddr.Text);
    ServerHost := GetHost(edtHostAddr.Text);
    ClientSocket1.Active := False;
    ClientSocket1.Active := True;
    URLAppPath := '';
    URLAppPath := URLAppPath + 'HEAD /' + Self.ServerFileName + ' HTTP/1.1' + #13#10;
    URLAppPath := URLAppPath + 'Pragma: no-cache' + #13#10;
    URLAppPath := URLAppPath + 'Cache-Control: no-cache' + #13#10;
    URLAppPath := URLAppPath + 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)'+#13#10;
    URLAppPath := URLAppPath + 'Host: ' + ServerHost + #13#10;
    URLAppPath := URLAppPath + #13#10;
    ClientSocket1.Socket.SendText(URLAppPath);
    while ClientSocket1.Active do
    begin
      if IsStop then Break;
      cmd1 := SocketRevLine(ClientSocket1.Socket,60*1000);
      //計算文件的長度
      if Pos(LowerCase('Content-Length: '), LowerCase(cmd1)) = 1 then
      begin
        value1 := Copy(cmd1, Length('Content-Length: ') + 1, Length(cmd1));
        TotalLen:= StrToInt(Trim(value1));
      end;
      if cmd1 = #13#10 then Break;
    end;
    clientsocket1.Active := False;
    clientsocket1.Active := True;
    URLAppPath := '';
    URLAppPath := URLAppPath + 'GET /' + Self.ServerFileName + ' HTTP/1.1'+#13#10;
    URLAppPath := URLAppPath + 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*'+#13#10;
    URLAppPath := URLAppPath + 'Cache-Control: no-cache' + #13#10;
    URLAppPath := URLAppPath + 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)'+#13#10;
    URLAppPath := URLAppPath + 'RANGE: bytes=' + IntToStr(RecDownPoint) + '-' + #13#10;
    URLAppPath := URLAppPath + 'Host: ' + Self.ServerHost + #13#10;
    URLAppPath := URLAppPath + #13#10;
    ClientSocket1.Socket.SendText(URLAppPath);
    while ClientSocket1.Active = True do
    begin
      if IsStop then Break;
      cmd1 := SocketRevLine(ClientSocket1.Socket, 60*1000);
      //是否可接收
      if pos(LowerCase('Content-Range:'), LowerCase(cmd1)) = 1 then
      begin
        IsRev := True;
      end;
      if Pos(LowerCase('Content-Length: '), LowerCase(cmd1)) = 1 then
      begin
        value1 := Copy(cmd1, Length('Content-Length: ')+1, Length(cmd1));
        RecLen := StrToInt(Trim(value1));
      end;
      if cmd1 = #13#10 then Break;
    end;
    RealRecLen := 0;
    while ClientSocket1.Active = True do
    begin
      if IsStop then Break;
      {不能接收則退出}
      if not IsRev then Break;
      {如果文件當前的長度大于服務器標識的長度,則是出錯了,不要寫入文件中}
      if FileSize(TempFile) >= TotalLen then
      begin
        MessageInfo('當前文件已下載完成');
        Break;
      end;
      ZeroMemory(@BufInfo, SizeOf(BufInfo));
      Rec := ClientSocket1.Socket.ReceiveBuf(BufInfo, SizeOf(BufInfo));
      {如果實際收到的長度大于服務器標識的長度,則是出錯了,不要寫入文件中}
      if RealRecLen >= RecLen then
      begin
        MessageInfo('當前文件已下載完成');
        Break;
      end;
      {如果當前的長度大于服務器標識的長度,則是出錯了,不要寫入文件中}
      if RecDownPoint = RecLen then
      begin
        MessageInfo('當前文件已下載完成');
        Break;
      end;
      BlockWrite(TempFile, BufInfo, Rec);
      RealRecLen := RealRecLen + Rec;
      lblStatusInfo.Caption := FormatFloat('#,##',RealRecLen) + '/' + FormatFloat('#,##', RecLen);
      lblStatusInfo.Caption := lblStatusInfo.Caption + '->' + IntToStr(Trunc((RealRecLen/RecLen)*100)) + '%';
      Application.ProcessMessages;
    end;
    CloseFile(TempFile);
    ClientSocket1.Active := False;
  except
    CloseFile(TempFile);
    MessageInfo('無法鏈接到遠程主機');
  end;
end;

procedure TfrmBreakPoint.edtHostAddrChange(Sender: TObject);
var
  ConfigIni: TIniFile;
begin
  ConfigIni := TIniFile.Create(GetAppPath + 'Config.ini');
  try
    ConfigIni.WriteString('File', 'Host', edtSaveFile.Text);
    LocalFileName := edtSaveFile.Text;
    edtSaveFile.Text := GetFile(edtHostAddr.Text);
  finally
    ConfigIni.Free;
  end;
end;

procedure TfrmBreakPoint.FormCreate(Sender: TObject);
var
  ConfigIni: TIniFile;
begin
  ConfigIni := TIniFile.Create(GetAppPath + 'Config.ini');
  try
    edtHostAddr.Text := ConfigIni.ReadString('File', 'Host', edtHostAddr.Text);
    LocalFileName := ConfigIni.ReadString('File', 'SaveFileName', '');
    edtSaveFile.Text := LocalFileName;
  finally
    ConfigIni.Free;
  end;
end;

procedure TfrmBreakPoint.edtSaveFileChange(Sender: TObject);
var
  ConfigIni: TIniFile;
begin
  ConfigIni := TIniFile.Create(GetAppPath + 'Config.ini');
  try
    ConfigIni.WriteString('File', 'SaveFileName', edtSaveFile.Text);
    LocalFileName := edtSaveFile.Text;
  finally
    ConfigIni.Free;
  end;
end;

procedure TfrmBreakPoint.btnGetHeadInfoClick(Sender: TObject);
var
  URLAppPath: string;
  bufInfo: TBufByte;
  {服務器返回的長度;實際已經收到的長度}
  //Rec, RecLen: Longint;
begin
  if Trim(edtHostAddr.Text) = '' then Exit;
  IsStop := False;
  ClientSocket1.Active := False;
  ClientSocket1.Host := GetHost(edtHostAddr.Text);
  ClientSocket1.Port := 80;
  ClientSocket1.Active := True;
  URLAppPath := '';
  try
    ServerFileName:=GetFile(edtHostAddr.Text);
    ServerHost:=GetHost(edtHostAddr.Text);
    URLAppPath := URLAppPath + 'GET /' + ServerFileName + ' HTTP/1.1'+#13#10;
    URLAppPath := URLAppPath + 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*' + #13#10;
    URLAppPath := URLAppPath + 'Cache-Control: no-cache' + #13#10;
    URLAppPath := URLAppPath + 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)' + #13#10;
    URLAppPath := URLAppPath + 'RANGE: bytes=' + IntToStr(533263) + '-533263' + #13#10;
    URLAppPath := URLAppPath + 'Host: ' + ServerHost + #13#10;
    URLAppPath := URLAppPath + #13#10;
    ClientSocket1.Socket.SendText(URLAppPath);
    begin
      ZeroMemory(@bufInfo, SizeOf(bufInfo));
      //Rec := ClientSocket1.Socket.ReceiveBuf(bufInfo, SizeOf(bufInfo));
      //RecLen := RecLen + Rec;
      Memo1.Lines.Add(StrPas(@bufInfo));
      Application.ProcessMessages;
    end;
  except
    ShowMessage('ClientSocket Get Data Error');
  end;
  ClientSocket1.Active := False;
end;

procedure TfrmBreakPoint.btnStopDownloadClick(Sender: TObject);
begin
  IsStop := True;
end;

procedure TfrmBreakPoint.edtHostAddrClick(Sender: TObject);
begin
  edtHostAddr.SelectAll;
end;

procedure TfrmBreakPoint.MessageInfo(SetInfo: string);
begin
  MessageBox(Handle, PChar(SetInfo), '信息提示', MB_OK+MB_ICONINFORMATION);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩制服丝袜av| 91老师国产黑色丝袜在线| 狠狠色丁香久久婷婷综合丁香| 国产精品亚洲专一区二区三区| 欧美日韩亚洲丝袜制服| 国产欧美日韩三区| 免费人成在线不卡| 欧美在线观看视频一区二区三区| www国产精品av| 午夜在线成人av| 91浏览器在线视频| 日本一区二区高清| 久久99久久99小草精品免视看| 欧美色综合久久| 亚洲欧洲三级电影| 国产v日产∨综合v精品视频| 日韩美女在线视频| 久久精品国产秦先生| 欧美乱熟臀69xxxxxx| 亚洲一二三区不卡| 欧美在线一二三四区| 亚洲色图在线播放| 91麻豆6部合集magnet| 亚洲欧美一区二区视频| 成人动漫中文字幕| 国产精品护士白丝一区av| 国产精品白丝jk黑袜喷水| 精品国产乱码久久久久久牛牛| 蜜臀99久久精品久久久久久软件| 欧美网站大全在线观看| 亚洲综合精品自拍| 欧美美女bb生活片| 日韩国产一二三区| 欧美一激情一区二区三区| 男人的j进女人的j一区| 日韩欧美一区电影| 国产一区美女在线| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲最色的网站| 久久精品一二三| 国产综合色视频| 国产清纯美女被跳蛋高潮一区二区久久w| 九色综合国产一区二区三区| 欧美成人aa大片| 黄色小说综合网站| 久久久久综合网| 成人妖精视频yjsp地址| 亚洲男同1069视频| 欧美福利电影网| 久久成人综合网| 国产精品美女视频| 91国内精品野花午夜精品| 亚洲成人综合在线| 精品第一国产综合精品aⅴ| 国产乱一区二区| 中文字幕亚洲一区二区av在线 | 国产成都精品91一区二区三| 国产精品短视频| 欧美日韩一区成人| 麻豆极品一区二区三区| 中文字幕精品一区| 欧美日韩一区视频| 国产成人精品免费在线| 一个色在线综合| 3d动漫精品啪啪一区二区竹菊| 激情图区综合网| 亚洲精品美国一| 日韩一区二区视频| 成人黄色小视频| 日本人妖一区二区| 麻豆成人av在线| 亚洲免费在线播放| 日韩精品一区二区三区中文不卡| 国产91高潮流白浆在线麻豆| 午夜久久电影网| 国产喷白浆一区二区三区| 欧美日韩中文另类| 成人美女视频在线看| 丝袜诱惑制服诱惑色一区在线观看| 久久久美女毛片| 777久久久精品| 99久久综合色| 国产一区二区在线观看视频| 亚洲综合丁香婷婷六月香| 26uuu亚洲综合色| 欧美日韩精品一区视频| 粉嫩高潮美女一区二区三区| 日本欧美大码aⅴ在线播放| 亚洲乱码精品一二三四区日韩在线 | 色又黄又爽网站www久久| 韩国精品一区二区| 日韩—二三区免费观看av| 亚洲精品v日韩精品| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美一区二区不卡视频| 色av成人天堂桃色av| 高清国产一区二区| 麻豆精品在线播放| 午夜电影久久久| 一区二区欧美在线观看| 中文字幕一区二区三区乱码在线| 欧美成人三级电影在线| 在线综合亚洲欧美在线视频| 国产欧美在线观看一区| 久久综合中文字幕| 精品1区2区在线观看| 91精品国产欧美日韩| 精品视频色一区| 欧美日韩五月天| 欧美午夜理伦三级在线观看| 色网站国产精品| 91免费版在线看| 日本精品裸体写真集在线观看| 99精品偷自拍| 色婷婷亚洲婷婷| 91国产免费观看| 欧美男生操女生| 日韩欧美aaaaaa| 日韩精品专区在线| 久久免费视频色| 久久精品亚洲精品国产欧美 | 91精品国产高清一区二区三区蜜臀| 欧美色精品在线视频| 欧美久久久久中文字幕| 日韩欧美国产精品一区| 精品国产免费一区二区三区四区 | 国产成人av影院| www.综合网.com| 色94色欧美sute亚洲线路二| 欧美色中文字幕| 日韩欧美亚洲国产另类| 欧美精品一区二区在线播放| 久久久蜜桃精品| 亚洲视频精选在线| 波多野结衣中文一区| 91久久香蕉国产日韩欧美9色| 欧美主播一区二区三区| 欧美剧情电影在线观看完整版免费励志电影| 欧美色国产精品| 日韩精品中文字幕一区二区三区 | 国产成人免费在线观看不卡| 成人一级片网址| 在线观看国产91| 日韩一区二区三区在线| 久久伊人中文字幕| 亚洲色图视频网| 美腿丝袜亚洲一区| 99视频精品在线| 欧美一区国产二区| 国产精品午夜电影| 日产国产高清一区二区三区| 国产福利一区在线观看| 日本乱码高清不卡字幕| 欧美大片一区二区| 亚洲精品美国一| 极品少妇一区二区三区精品视频| 99久久精品一区二区| 宅男在线国产精品| 亚洲欧美在线视频观看| 毛片基地黄久久久久久天堂| 97精品国产97久久久久久久久久久久| 欧美日韩视频在线第一区| 久久久99免费| 日本成人中文字幕在线视频| av在线播放成人| 精品电影一区二区| 视频一区二区中文字幕| 99久久精品费精品国产一区二区| 日韩欧美成人午夜| 亚洲成av人在线观看| 成人av先锋影音| 精品国产91乱码一区二区三区| 国产很黄免费观看久久| 91.xcao| 一区二区日韩av| www.av亚洲| 亚洲国产精品ⅴa在线观看| 狂野欧美性猛交blacked| 在线一区二区视频| 亚洲欧美中日韩| 丁香亚洲综合激情啪啪综合| 欧美一区日本一区韩国一区| 亚洲国产日韩a在线播放性色| 波多野结衣一区二区三区| 26uuu久久综合| 精品一区二区三区不卡| 日韩写真欧美这视频| 日本欧美一区二区三区乱码| 在线免费观看成人短视频| 亚洲天堂免费在线观看视频| 丰满亚洲少妇av| 国产欧美日本一区二区三区| 久久99精品久久久久久国产越南| 欧美一区二区三区四区在线观看| 亚洲国产精品久久久男人的天堂| 色网站国产精品| 亚洲高清视频中文字幕| 欧美亚洲国产一卡| 亚洲国产另类av| 欧美在线色视频|