2023年11月26日发(作者:)

基于FTP协议的客户端自动更新程序的设计与实现

赵卫绩;刘井莲

【摘 要】为了能够及时更新客户端软件,保证用户使用最新版本的客户端软件,在深

入研究FTP网络编程技术的基础上,给出了一种基于FTP协议的客户端自动更新程

序的设计方案,并在C + + Builder 开发环境下完成了软件的开发和测试.测试结果

表明,该方案有效地解决了客户端程序自动更新问题,取得了良好的应用效果.

【期刊名称】《科学技术与工程》

【年(),期】2010(010)034

【总页数】3(P8591-8593)

【关键词】自动更新;客户端程序;文件传输协议

【作 者】赵卫绩;刘井莲

【作者单位】绥化学院计算机学院,绥化,152061;绥化学院计算机学院,

,152061

【正文语种】

【中图分类】TP393.09

客户端软件由于功能的扩充或者修复了程序中存在的 bug,而重新编译出新的版本

的软件。如果用户没有及时更新客户端程序,可能造成部分功能无法使用或者数据

不一致等问题。客户端自动更新程序,能够检测新版本程序的发布,并及时自动升级,

用户无需访问网站就能利用在线升级程序进行升级和更新[1]。因此,开发客户端自

动更新程序是十分必要的。

软件自动更新常用的方法有二种,一是在局域网内采用映射网络驱动器的方法实现,

二是在 Internet上用 FTP或者 HTTP协议等网络协议实现下载[2]。文献[3]研究

了局域网内的软件更新,文献[4,5]给出了基于 HTTP协议通过 API函数

URLDownloadToFile()实现网络文件的自动下载的方法,可以实现客户端程序更新。

FTP文件传输协议是用于在网络上进行文件传输的一套标准协议,用于 Internet

的控制文件的双向传输,该协议可以高效稳定地完成文件的上传和下载。现基于

FTP文件传输协议给出了一种新的客户端自动更新程序的设计方案。并在

C++Builder开发环境下完成了软件的开发和测试。测试结果表明,该方案有效地

解决了客户端程序自动更新问题,取得了良好的应用效果。

1.术原理

客户端自动更新程序的技术原理是将当前正在使用的客户端软件的版本保存到 ini

文件中,软件启动时,自动连接到服务器请求当前最新版本号,将返回到版本号与 ini

文件中的进行比较,如果当前版本不是最新版本,则向服务器请求更新文件列表,依次

下载文件列表中的每一个文件,如果下载成功,则更新成功。因此,FTP文件下载技术

是该方案的关键技术。

控件常用属性

TIdFTP Indy Clinets中的一个 FTP客户端控件,可以实现 FTP方式文件的上传

与下载。常用控件属性如下:

User:用户名

Pasword:密码

Host:FTP服务器地址

TransferType:用于指定传输内容是二进制文件(ftBinary)还是 ASCII文件

(ftASCII)

常用函数

函数

TIdFTP通过 Connect函数连接远程 FTP服务器。

void Connect(BOOL AutoLogin);

当设置好 TIdFTP UserPasswordHost等属性后,调用 Connect()连接到

Host指定的 FTP服务器。

函数

TIdFTP是通过 Get方法实现 FTP文件下载的。函数原型如下:

void Get(const AnsiString ASourceFile,const AnsiString ADestFile);

参数 ASourceFile表示 Ftp服务器端的文件名,ADestFile表示本地的文件名。通

Get函数可以将文件从 ASourceFile下载到 ADestFile

2.动更新程序的实现

2.1.接到 FTP服务器

实现方法如下:

(1) TIdFTP加入到 Form,命名为 idftp

(2)连接 FTP服务器

假定 m_strHostm_strUserm_strPassword分别保存 FTP服务器的 IP地址、

用户名、密码,以下代码可完成连接 FTP服务的功能。

实现代码如下:

idftp→User=m_strUser;

idftp→Password=m_strPassword;

idftp→Host=m_strHost;

idftp→Passive=true;

idftp→TransferType=ftBinary;

idftp→Connect();

if(idftp→Connected())

//连接 FTP服务器成功

else

//连接 FTP服务器失败

2.2.序自动更新

当编译出新版本的软件的时候,将新版本软件所涉及到的新文件上传到 FTP服务器,

记录新的版本号的同时,记录下新文件在 FTP服务器的路径。当客户端启动时,如果

申请到的最新版本号高于当前使用版本,则申请需要更新的文件列表,服务器将记录

下的新文件路径发送给客户端,客户端采用TIdFTP控件的 Get方法下载新文件到

当前文件夹,从而实现客户端软件的自动更新。

实现代码如下:

for(int x=0;x〈lst→Count;x++)

{

AnsiString s=lst→operator[](x);

vectorAnsiString v;

ParseString(s,v);int x=StrToInt(s);

m_iBytesToTransfer=x;

AnsiString tmp=v[8];

m_strRm tFile="//update//"+tmp;

//计算客户端程序所在的文件夹

m_strLclFile=ExtractFilePath(Application-ExeName)+""+tmp;

//如果文件存在,删除

if(FileExists(m_strLclFile))

DeleteFile(m_strLclFile);

//文件下载

idftp-Get(m_strRmtFile,m_strLc lFile);

}

3.

给出的客户端自动更新程序是基于 FTP文件传输协议,该协议可以高效、稳定地实

现文件的上传和下载,解决了传统基于 HTTP协议在上传和下载大文件时不稳定的

问题。在多次测试中,均能保证文件正确下载,达到了预期目的,可用于客户端软件自

动更新,具有良好的应用前景。

【相关文献】

1 赵小娥. VC++编程实现程序的自动更新.西安文理学院学报(自然科学版),2006,9(2):80 82

2 , .软件自动更新的两种方法.医疗卫生装备,2005;26(2):3839

3 方风波.基于办公局域网的软件自动更新.长江大学学报(自科版)理工卷,2007;4(2):297298

4 朱建凯,郑洪源,丁秋林.基于 Visual C++客户端程序自动更新的应用研究.计算机应用与软

,2010;27(2):172173

5 张志彬,白剑坤.HIS系统客户端软件自动更新实现.医疗装备,2009;(3):2728