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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? multiftp.cpp

?? 使用vc++6.0開(kāi)發(fā)的一個(gè)支持多線程ftp程序
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//---------------------------------------------------------------------------

#include <basepch.h>

#pragma hdrstop

#include "MultiFtp.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TMultiFtp *)
{
        new TMultiFtp(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMultiFtp::TMultiFtp(TComponent* Owner)
        : TComponent(Owner)
{
   lock = false;
   isUseFile = false;
   runningThreadCnt = 0;
   stop = false;
   this->Owner  = Owner;
}
__fastcall TMultiFtp::~TMultiFtp()
{
    fclose(this->globalFile);
    if(this->inforImpl.fromToImpl)
      delete[] this->inforImpl.fromToImpl;
}
//---------------------------------------------------------------------------
namespace Multiftp
{
        void __fastcall PACKAGE Register()
        {
                 TComponentClass classes[1] = {__classid(TMultiFtp)};
                 RegisterComponents("System", classes, 0);
        }
}
//---------------------------------------------------------------------------
void __fastcall TMultiFtp::FreeMemory()
{
    if(this->globalFile)
       fclose(this->globalFile);
    if(this->inforImpl.fromToImpl)
      delete[] this->inforImpl.fromToImpl;
}
SOCKET __fastcall TMultiFtp::ConnectFtp(String host ,int port ,String userName ,String  pass)
{
    this->DoOnTextOut("歡迎使用funinhand多線程,斷點(diǎn)續(xù)傳軟件!!");
    MultiThreadDealSocket *dealSocket = new MultiThreadDealSocket();
    SOCKET client = dealSocket->GetConnect(host,port);
    char * buffer = new char[100];
    int recLen ;
    recLen = recv(client,buffer,100,0);
    buffer[recLen]=0;
    if(client == NULL)
    {
      this->DoOnException("連接ftp服務(wù)器失敗!");
      delete[] buffer;
      return NULL;
    }
    this->DoOnTextOut("連接ftp服務(wù)器成功!");
    String user = "USER  "+userName+" \r\n";
    this->DoOnTextOut(user);
    send(client,user.c_str(),user.Length(),0);
    recLen = recv(client,buffer,100,0);
    buffer[recLen]=0;
    if(GetCode(buffer) == "331")
    {
       this->DoOnTextOut("服務(wù)器要求驗(yàn)證密碼。");
       String password = "PASS "+pass+" \r\n";
       this->DoOnTextOut(password);
       send(client,password.c_str(),password.Length(),0);
       recLen = recv(client,buffer,100,0);
        buffer[recLen]=0;
       int tryTimes = 3;
       while(GetCode(buffer) != "230" && tryTimes > 0)
       {
          send(client,password.c_str(),password.Length(),0);
          recLen = recv(client,buffer,100,0);
           buffer[recLen]=0;
          tryTimes --;
          this->DoOnTextOut("第"+IntToStr(3-tryTimes)+"嘗試");
       }
       if(tryTimes < 0)
       {
           this->DoOnException(userName +"登錄失??!");
           delete[] buffer;
           return NULL;
       }
       else
          this->DoOnTextOut("登錄成功!");
    }
    char *type = "TYPE I \r\n";
    this->DoOnTextOut(type);
    send(client,type,strlen(type),0);
    recLen = recv(client,buffer,100,0);
     buffer[recLen]=0;
    this->DoOnTextOut(buffer);
    delete[] buffer;
    return client;
}
void __fastcall TMultiFtp::SetStop(bool stop)
{
  this->stop  = stop;
}
void __fastcall TMultiFtp::DoOnComplete()
{
  if(this->FOnComplete)
     this->FOnComplete(this->Owner);
}
void __fastcall TMultiFtp::DoOnGetFileSize(DWORD fileSize)
{
   if(this->FOnGetFileSize)
      this->FOnGetFileSize(this->Owner,fileSize);
}
void __fastcall TMultiFtp::DoOnTextOut(String text)
{
 if(this->FOnTextOut)
  {
     int index = text.Pos("\r\n");
     if(index > 0)
       this->FOnTextOut(this->Owner,text.SubString(1,index-1));
     else
       this->FOnTextOut(this->Owner,text);
  }
}
void __fastcall TMultiFtp::DoOnException(String error)
{
   if(this->FOnException)
   {
      int index = error.Pos("\r\n");
      if(index > 0)
      {
        this->FOnException(this->Owner,error.SubString(1,index-1));
      }
      else
      {
          this->FOnException(this->Owner,error);
      }
   }
}
void __fastcall TMultiFtp::DoOnProgress(DWORD pos)
{
  if(this->FOnProgress)
    this->FOnProgress(this->Owner,pos);
}
void  __fastcall TMultiFtp::DoOnGetRate(DWORD cnt)
{
   if(this->FOnGetRate)
      this->FOnGetRate(this->Owner,cnt);
}
String __fastcall TMultiFtp::GetCode(String revStr)
{
  String str;
  int index ;
  index = revStr.Pos(" ");
  str = revStr.SubString(1,index-1);
  return str;
}
DWORD __fastcall TMultiFtp::GetFileSize()
{
   return this->fileSize;
}
DWORD __fastcall TMultiFtp::GetFtpFileSize(SOCKET client ,String fileName)
{
   String  size = "SIZE "+this->FFileName+" \r\n";
   this->DoOnTextOut(size);
   send(client,size.c_str(),size.Length(),0);
   char *buffer= new char[100];
   int recLen ;
   recLen = recv(client,buffer,100,0);
   buffer[recLen]=0;
   this->DoOnTextOut(buffer);
   if(GetCode(buffer) != "213")
   {
     this->DoOnTextOut("嘗試第二次獲取");
     send(client,size.c_str(),size.Length(),0);
     recLen = recv(client,buffer,100,0);
      buffer[recLen]=0;
      this->DoOnTextOut(buffer);
     if(GetCode(buffer) != "213")
     {
        this->DoOnTextOut("嘗試第三次獲取");
        send(client,size.c_str(),size.Length(),0);
        recLen = recv(client,buffer,100,0);
         buffer[recLen]=0;
         this->DoOnTextOut(buffer);
        if(GetCode(buffer) != "213")
        {
            this->DoOnException("獲取文件大小失??!");
            delete[] buffer;
             return 0;
        }
        else
        {
            this->DoOnTextOut(buffer);
        }
     }
     else
     {
         this->DoOnTextOut(buffer);
     }
   }
   else
   {
       this->DoOnTextOut(buffer);
   }
   String recvStr(buffer);
   delete[] buffer;
   int index =  recvStr.Pos("\r\n");
   recvStr = recvStr.SubString(1,index-1);
   index = recvStr.Pos(" ");
   recvStr = recvStr.SubString(index+1,recvStr.Length()- index);
   this->fileSize  =StrToInt(recvStr);
   return this->fileSize;
}
bool __fastcall  TMultiFtp::CheckIsSupportMulti(SOCKET client)
{
   String rest = "REST 100 \r\n";
   char *buffer = new char[100];
   this->DoOnTextOut(rest);
   int recLen ;
   send(client,rest.c_str(),rest.Length(),0);
   recLen = recv(client,buffer,100,0);
   buffer[recLen]=0;
   this->DoOnTextOut(buffer);
   if(GetCode(buffer) != "350")
   {
       delete[] buffer;
       return false;
   }
   delete[] buffer;
   return true;
}
FileTail * __fastcall TMultiFtp::GetFilePosLen()
{
   while(lock)
   {
     Sleep(50);
   }
   lock = true;
   FileTail * temp  = new FileTail[1];
   if(this->currentFilePos >= fileSize)
   {
       lock = false;
       temp->isOk = true;
       return temp;
   }
   if(this->FPerGetLen + this->currentFilePos > fileSize)
   {
       temp->pos = ConvertIntToStr(this->currentFilePos);
       temp->len = ConvertIntToStr(this->fileSize - this->currentFilePos);
       temp->isOk = false;
       this->currentFilePos = fileSize;
       lock = false;
       return temp;
   }
   temp->pos = ConvertIntToStr(this->currentFilePos);
   temp->len = ConvertIntToStr(this->FPerGetLen);
   temp->isOk = false;
   this->currentFilePos = this->currentFilePos + this->FPerGetLen;
   lock = false;
   return  temp;
}
String __fastcall TMultiFtp::ConvertIntToStr(DWORD len)
{
     String str;
     str = IntToStr(len);
     int strLen;
     strLen = str.Length();
     for(int i =0 ; i < 10 -strLen ; i++)
     {
        str = "0"+str;
     }
     return str;
}
bool __fastcall TMultiFtp::ChangeDirectory(SOCKET client ,String dirName)
{
    String dir =  "CWD "+dirName+" \r\n";
    this->DoOnTextOut(dir);
    char *buffer = new char[100];
    int recLen ;
    send(client,dir.c_str(),dir.Length(),0);
    recLen = recv(client,buffer,100,0);
    buffer[recLen]=0;
    if(GetCode(buffer) != "250")
    {
        delete[] buffer;
        this->DoOnException(buffer);
        return false;
    }
    this->DoOnTextOut(buffer);
    delete[] buffer;
    return true;
}
void __fastcall TMultiFtp::StartDownloadFile()
{
   SOCKET client = this->ConnectFtp(this->FHost,this->FPort,this->FUserName,this->FPass);
   this->DoOnTextOut("下載的線程模塊數(shù)為:"+IntToStr(this->FThreadCnt));
   if(!client)
   {
       return;
   }  //連接ftp成功
   if(!this->CheckIsSupportMulti(client))
   {
      this->DoOnTextOut("該站點(diǎn)不支持?jǐn)帱c(diǎn)續(xù)傳。");
      this->FThreadCnt =  1;     //如果ftp服務(wù)器不支持多線程下載
   }
   this->DoOnTextOut("該站點(diǎn)支持?jǐn)帱c(diǎn)續(xù)傳。");
   ////////////將當(dāng)前的工作目錄設(shè)置成
   this->FileName = this->SetCurrentDir(client,this->FilePath);
   this->GetFtpFileSize(client,this->FileName);
   this->DoOnGetFileSize(this->fileSize);  //輸出文件大小
   if(this->fileSize == 0)
   {
      closesocket(client);
      return;
   }
   if(this->fileSize <= (DWORD)this->PerGetLen)
   {
      this->FThreadCnt = 1;
   }
   if(this->FileName == "")
   {
      closesocket(client);
      return;
   }
   String hisFileName = this->FileName + ".san";
   ///////////////////檢測(cè)是否斷點(diǎn)續(xù)傳/////////////////////////
   if(FileExists(hisFileName)&& (GetFileSizeByName(hisFileName) > 0)) //如果文件存在
   {
      this->GetInfor(hisFileName);
   }
   else
   {
     globalFile = fopen(hisFileName.c_str(),"w+b");
     if(globalFile == NULL)
     {
      this->DoOnException("創(chuàng)建文件"+hisFileName+"失敗");
      closesocket(client);
          return ;
     }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品日韩专区silk| 最近中文字幕一区二区三区| 国产黄人亚洲片| 一区二区三区国产精品| 精品国产一二三| 欧美在线观看18| 风流少妇一区二区| 蜜臀久久99精品久久久久宅男| 国产精品国产自产拍在线| 欧美一级高清片| 日本乱人伦aⅴ精品| 国产99久久久久| 久久精品国产第一区二区三区| 一区二区国产视频| 国产精品久久久久久久久免费丝袜| 51精品久久久久久久蜜臀| 99在线精品一区二区三区| 国产最新精品免费| 麻豆成人av在线| 午夜精品久久久久久久99水蜜桃 | 99在线热播精品免费| 免费不卡在线观看| 亚洲超碰精品一区二区| 成人欧美一区二区三区1314| 久久精品综合网| 久久男人中文字幕资源站| 欧美一区二区三区系列电影| 精品视频色一区| 欧美在线一区二区三区| 91丨九色丨尤物| 91一区二区三区在线播放| 国产成人在线观看| 国产很黄免费观看久久| 紧缚捆绑精品一区二区| 麻豆成人在线观看| 久久97超碰国产精品超碰| 奇米色一区二区| 蜜臀久久久久久久| 热久久一区二区| 蜜桃视频一区二区三区| 日韩电影在线免费看| 亚洲成av人片观看| 午夜久久久久久久久久一区二区| 一区二区三区中文字幕在线观看| 亚洲女子a中天字幕| 亚洲精品欧美综合四区| 久久电影网站中文字幕| 日本在线不卡视频一二三区| 日本美女一区二区| 紧缚奴在线一区二区三区| 国产一区二区网址| 大陆成人av片| 91麻豆精东视频| 欧美亚洲国产一区二区三区| 欧美午夜精品一区二区蜜桃| 欧美日韩精品免费观看视频| 91精品中文字幕一区二区三区| 91精品久久久久久久91蜜桃| 日韩欧美视频一区| 久久久精品一品道一区| 国产无人区一区二区三区| 亚洲欧洲精品天堂一级| 亚洲精品国产第一综合99久久| 亚洲国产一区二区三区| 日本不卡在线视频| 国产在线精品不卡| 91视视频在线观看入口直接观看www| 91免费国产在线| 欧美日韩高清一区二区| 精品国产电影一区二区| 国产精品传媒入口麻豆| 亚洲国产欧美一区二区三区丁香婷| 日产国产高清一区二区三区| 国内欧美视频一区二区| 99麻豆久久久国产精品免费| 欧美专区日韩专区| 精品美女被调教视频大全网站| 日本一区二区久久| 亚洲电影中文字幕在线观看| 国产在线精品免费av| 91日韩一区二区三区| 欧美一区二区播放| 国产精品久久久久精k8 | 精品国产免费人成电影在线观看四季 | 欧美色国产精品| 2019国产精品| 亚洲福利一二三区| 国产91色综合久久免费分享| 欧美专区在线观看一区| 国产日产欧美一区二区三区| 亚洲国产美国国产综合一区二区| 国产精品自拍网站| 欧美精品精品一区| 中文字幕一区二区三区四区| 蜜桃av一区二区三区电影| www.激情成人| 精品国产乱码久久久久久影片| 亚洲日穴在线视频| 国产精品77777竹菊影视小说| 欧美色综合影院| 中文字幕欧美激情一区| 蜜臀av亚洲一区中文字幕| 91麻豆成人久久精品二区三区| 精品国产伦一区二区三区观看方式| 亚洲综合成人在线视频| 成人激情综合网站| 欧美成人午夜电影| 偷拍日韩校园综合在线| 99视频精品在线| 国产无人区一区二区三区| 日韩电影在线免费看| 欧美亚洲国产一区在线观看网站| 欧美高清一级片在线观看| 激情久久久久久久久久久久久久久久| 欧美在线999| 亚洲欧洲精品一区二区三区不卡| 国产在线一区观看| 欧美一二三区精品| 三级影片在线观看欧美日韩一区二区| 99国产精品久久久久| 中文字幕精品三区| 国产精品1区二区.| 久久网站热最新地址| 久久精品国产久精国产| 日韩欧美一区在线| 人妖欧美一区二区| 亚洲一区二区精品视频| 97se亚洲国产综合自在线不卡| 中文字幕免费一区| 国产v综合v亚洲欧| 久久久不卡网国产精品二区| 国模少妇一区二区三区| 久久亚洲二区三区| 国产成人在线色| 亚洲国产高清在线| 99天天综合性| 亚洲欧美一区二区三区国产精品| av中文字幕在线不卡| 亚洲欧洲成人精品av97| 99re这里只有精品首页| 亚洲素人一区二区| 欧美性xxxxxx少妇| 日韩专区欧美专区| 欧美一级一区二区| 精品在线播放免费| 欧美激情一区二区三区全黄| 国产91富婆露脸刺激对白| 国产精品久久三区| 97久久超碰精品国产| 亚洲精品免费看| 欧美片网站yy| 精品一区二区三区在线观看| 精品捆绑美女sm三区| 国产乱码一区二区三区| 国产精品情趣视频| 91浏览器打开| 午夜成人免费视频| 精品理论电影在线观看| 国产a级毛片一区| 亚洲综合色视频| 欧美一级一级性生活免费录像| 国产精品自在欧美一区| 亚洲婷婷国产精品电影人久久| 欧美性猛交xxxxxx富婆| 青椒成人免费视频| 久久日韩粉嫩一区二区三区| 成人99免费视频| 午夜精品在线视频一区| 日本vs亚洲vs韩国一区三区二区| 日韩女优毛片在线| 成人网在线播放| 亚洲高清久久久| www久久精品| 91成人在线精品| 久久精品国产秦先生| 中文字幕亚洲在| 日韩一区二区三区电影| 懂色av中文字幕一区二区三区| 亚洲一区在线观看免费观看电影高清| 91精品免费观看| 99久久免费精品| 免费精品视频最新在线| 国产精品视频一二| 91精品国产入口| 91亚洲精品久久久蜜桃网站 | 国产精品综合视频| 亚洲观看高清完整版在线观看 | 欧美国产日本视频| 欧美猛男gaygay网站| 国产69精品久久久久777| 午夜在线成人av| 国产精品久久久久久久久久久免费看 | 成人午夜精品一区二区三区| 午夜av区久久| 亚洲欧洲日产国码二区| 精品精品国产高清a毛片牛牛| 99久久99精品久久久久久 | 免费视频最近日韩| 亚洲免费高清视频在线| 久久久国产精华|