资源简介
c的ftp断点续传的客户端源代码
VC中利用FTP协议实现多线程断点续传(附源码)
代码片段和文件信息
//---------------------------------------------------------------------------
#include sepch.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多线程,断点续传软件!!“);
MultiThreadDealSocket *dealSocket = new MultiThreadDealSocket();
SOCKET client = dealSocket->GetConnect(hostport);
char * buffer = new char[100];
int recLen ;
recLen = recv(clientbuffer1000);
buffer[recLen]=0;
if(client == NULL)
{
this->DoOnException(“连接ftp服务器失败!“);
delete[] buffer;
return NULL;
}
this->DoOnTextOut(“连接ftp服务器成功!“);
String user = “USER “+userName+“ \r\n“;
this->DoOnTextOut(user);
send(clientuser.c_str()user.Length()0);
recLen = recv(clientbuffer1000);
buffer[recLen]=0;
if(GetCode(buffer) == “331“)
{
this->DoOnTextOut(“服务器要求验证密码。“);
String password = “PASS “+pass+“ \r\n“;
this->DoOnTextOut(password);
send(clientpassword.c_str()password.Length()0);
recLen = recv(clientbuffer1000);
buffer[recLen]=0;
int tryTimes = 3;
while(GetCode(buffer) != “230“ && tryTimes > 0)
{
send(clientpassword.c_str()password.Length()0);
recLen = recv(clientbuffer1000);
buffer[recLen]=0;
tryTimes --;
this->DoOnTextOut(“第“+IntToStr(3-tryTimes)+“尝试“);
}
if(tryTimes < 0)
{
this->DoOnException(userName +“登录失败!“);
delete[] buffer;
return NULL;
}
else
this->
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2005-01-21 14:09 project
文件 114150 2005-01-12 14:58 project\MultiThreadDealScoket.obj
文件 22093 2005-01-14 20:00 project\MultiFtp.~cpp
文件 4585 2005-01-14 14:45 project\MultiFtp.~h
文件 22242 2005-01-14 20:02 project\MultiFtp.cpp
文件 4585 2005-01-14 14:45 project\MultiFtp.h
文件 85777 2005-01-14 20:02 project\MultiFtp.obj
文件 7513 2005-01-14 19:32 project\MultiFtpDownloadThread.~cpp
文件 2203 2005-01-13 17:19 project\MultiFtpDownloadThread.~h
文件 7518 2005-01-14 19:34 project\MultiFtpDownloadThread.cpp
文件 2203 2005-01-13 17:19 project\MultiFtpDownloadThread.h
文件 45660 2005-01-14 19:34 project\MultiFtpDownloadThread.obj
文件 332 2005-01-12 11:08 project\MultiThreadDataClass.~cpp
文件 424 2005-01-12 11:54 project\MultiThreadDataClass.~h
文件 332 2005-01-12 11:08 project\MultiThreadDataClass.cpp
文件 666 2005-01-13 10:53 project\MultiThreadDataClass.h
文件 12606 2005-01-13 10:53 project\MultiThreadDataClass.obj
文件 1467 2005-01-12 10:32 project\MultiThreadDealScoket.~cpp
文件 443 2005-01-12 10:33 project\MultiThreadDealScoket.~h
文件 2528 2005-01-12 10:35 project\MultiThreadDealScoket.cpp
文件 532 2005-01-12 10:34 project\MultiThreadDealScoket.h
I.A.... 124 2006-05-28 09:29 readme.txt
----------- --------- ---------- ----- ----
337983 22
评论
共有 条评论