VB编程FTP微软详实案例附带源程序.docx
- 文档编号:23579565
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:49
- 大小:68.08KB
VB编程FTP微软详实案例附带源程序.docx
《VB编程FTP微软详实案例附带源程序.docx》由会员分享,可在线阅读,更多相关《VB编程FTP微软详实案例附带源程序.docx(49页珍藏版)》请在冰豆网上搜索。
VB编程FTP微软详实案例附带源程序
实例7FTP客户端程序
目标和要点
C实例目标
本实例将介绍创建FTP客户端程序并进行与FTP服务器连接的实例,程序运行的结果如图所示。
图启动窗体:
图7-1Ftp客户端程序运行时的启动窗体
主窗体:
图7-2Ftp客户端程序运行时的主窗体
本例中利用API函数实现与FTP服务器的连接与对话,可以根据主机服务器的地址和端口连接到Internet上任何一台FTP服务器上,对FTP服务器进行文件上载、文件下载等操作。
$技术要点
本实例的技术要点主要包括:
1.建立FTP连接的基本原理与步骤
2.建立FTP连接的要使用到的API函数
3.对FTP进行文件与目录操作
在本实例中,与FTP服务器的连接与对话是通过API函数来实现的,建立连接必须遵循一定的步骤和规则,才能正确地与FTP服务器取得连接和对话,总的说来,建立连接的步骤一般分为以下几步:
1打开Internet会话
2建立FTP类型的Internet连接
3设置FTP服务器的当前目录
4查看FTP服务器上指定目录下的文件
5从FTP服务器当前目录下载文件或上载文件
6在FTP服务器上进行目录或文件操作,如创建新目录,删除目录,删除文件等
7关闭与FTP服务器的连接
8关闭Internet对话
(其中步骤④、⑤、⑥可重复进行)
设计窗体时,设计窗体时为了便于了解建立连接的步骤,将打开Internet对话作为一个单独的启动时显示的窗体,在成功打开Internet对话后,显示进行FTP对话的主窗体,在主窗体中与FTP服务器交互对话。
对于实现连接与对话的每一个步骤,API函数至关重要,在整个交互对话过程中,我们只要熟悉了相应的API函数,就不难理解进行FTP操作的用法。
至于API函数怎么样通过Internet与FTP进行会话的底层细节,我们可不必去考虑。
实现步骤
F创建启动窗体frmFTPst
启动VB,新建一个标准EXE过程,在默认的窗体Form1中加载以下控件:
两个CommonButton控件、两个TextBox控件、两个Frame控件、两个Label控件。
F设定窗体和控件属性
首先适当调整窗体的尺寸大小,设置其标题为FTP客户端程序、窗体名称。
然后设置各个控件的属性值。
窗体及其主要控件的属性如表7-1所示:
表7-1frmFTPst窗体及其控件的主要属性
对象
属性
属性值
Form
Name
Caption
BorderStyle
MaxButton
MinButton
FrmFTPst
"FTP客户端程序"
2-Sizable
True
True
CommonButton
Name
Caption
CmdInternetOpen
"打开Internet会话"
CommonButton
Name
Caption
CmdInternetClose
"关闭Internet会话"
TextBox
Name
Appearance
TxtProxy
0'Flat
TextBox
Name
Appearance
TxtProxyPort
0'Flat
Label
Name
Caption
Label1
"端口:
"
Label
Name
Caption
Label2
"地址:
"
Frame
Name
Caption
Frame1
"打开及关闭会话"
Frame
Name
Caption
Frame1
"代理服务器"
设计窗体最终如图7-3所示:
图7-3设计的frmFTPst窗体
F创建主窗体frmFTP
在菜单“工程”下选择“添加窗体”,加入窗体Form2,将From2的大小调整到合适的尺寸,往窗体中添加以下控件:
七个CommonButton控件、四个TextBox控件、两个CheckBox控件、两个OptionBox控件、一个TreeView控件、一个DriveListbox控件、一个DirListBox控件、一个FileListBox控件、一个ImageList控件、五个Label控件、四个Frame控件。
F设定窗体和控件属性
首先适当调整窗体的尺寸大小,设置其标题为FTP客户端程序、窗体名称。
然后设置各个控件的属性值。
窗体及其主要控件的属性如表7-2所示:
表7-2frmFTP窗体及其控件的主要属性
对象
属性
属性值
Form
Name
Caption
BorderStyle
MaxButton
MinButton
FrmFTP
"FTP客户端程序"
2-Sizable
True
True
CommonButton
Name
Caption
CmdConnect
"连接"
CommonButton
Name
Caption
CmdClose
"断开"
CommonButton
Name
Caption
CmdGet
"下载"
CommonButton
Name
Caption
CmdPut
"上载"
CommonButton
Name
Caption
CmdMdDir
"新建目录"
CommonButton
Name
Caption
CmdDelDir
"删除目录"
CommonButton
Name
Caption
CmdDelFile
"删除文件"
TextBox
Name
Appearance
TxtServer
0'Flat
TextBox
Name
Appearance
TxtUser
0'Flat
TextBox
Name
Appearance
TxtPassword
0'Flat
TextBox
Name
Appearance
TxtPort
0'Flat
CheckBox
Name
Caption
Value
ChkAnon
"匿名登录"
0’Unchecked
CheckBox
Name
Caption
Value
ChkPassive
"FTP反向对话"
0’Unchecked
OptionButton
Name
Caption
Value
OptBin
"二进制"
False
OptionButton
Name
Caption
Value
OptAscii
"文本"
False
TreeView
Name
Style
Appearance
TreeView1
7
1
DriveListBox
Name
Drive1
DirListBox
Name
Dir1
FileListBox
Name
File1
ImageList
Name
ImageList1
Label
Name
Caption
Label1
"FTP服务器:
"
Label
Name
Caption
Label2
"用户名:
"
Label
Name
Caption
Label3
"口令:
"
Label
Name
Caption
Label4
"端口:
"
Label
Name
Caption
Label5
"传输方式:
"
Frame
Name
Caption
Frame1
"FTP服务器:
"
Frame
Name
Caption
Frame2
""
Frame
Name
Caption
Frame3
""
Frame
Name
Caption
Frame4
"本地计算机:
"
设计窗体最终如图7-4所示:
图7-4设计的frmFTP窗体
☞编写代码
1.模块modWinInet的代码:
在此模块中声明该程序用到的API函数及其常量:
OptionExplicit
PublicConstMAX_PATH=260
PublicConstNO_ERROR=0
'在WIN32_FIND_DATA结构中的文件查找属性常数
PublicConstFILE_ATTRIBUTE_READONLY=&H1'只读文件
PublicConstFILE_ATTRIBUTE_HIDDEN=&H2'隐含文件
PublicConstFILE_ATTRIBUTE_SYSTEM=&H4'系统文件
PublicConstFILE_ATTRIBUTE_DIRECTORY=&H10
'目录文件(所获取的文件类型是目录)
'在FtpFindFirstFile和FtpFindNextFile函数把文件和目录当作文件一同获取
PublicConstFILE_ATTRIBUTE_ARCHIVE=&H20'存档文件
PublicConstFILE_ATTRIBUTE_NORMAL=&H80'文件没有的其他属性值
PublicConstFILE_ATTRIBUTE_TEMPORARY=&H100'临时文件
PublicConstFILE_ATTRIBUTE_COMPRESSED=&H800'被压缩的文件和目录
PublicConstFILE_ATTRIBUTE_OFFLINE=&H1000
''直接从远程服务器中获得数据,而不使用本地缓冲的数据
PublicConstINTERNET_FLAG_RELOAD=&H80000000
'FTP服务器的文件打开标记:
只读或可写
PublicConstGENERIC_READ=&H80000000
PublicConstGENERIC_WRITE=&H40000000
'标示调用Internet会话的应用程序的名称
PublicConstscUserAgent="FTPCLIENT"
'按照预定义的方式打开连接Internet对话
PublicConstINTERNET_OPEN_TYPE_PRECONFIG=0
'直接连接Internet
PublicConstINTERNET_OPEN_TYPE_DIRECT=1
'通过代理服务器连接
PublicConstINTERNET_OPEN_TYPE_PROXY=3
'使用与连接协议相应的端口号
PublicConstINTERNET_INVALID_PORT_NUMBER=0
'与ftp服务器之间的文件传输采取ascii(文本)方式
PublicConstFTP_TRANSFER_TYPE_ASCII=&H1
'与ftp服务器之间的文件传输采取binary(二进制)方式
PublicConstFTP_TRANSFER_TYPE_BINARY=&H2
PublicConstINTERNET_FLAG_PASSIVE=&H8000000
'从服务器返回的一个附加错误
PublicConstERROR_INTERNET_EXTENDED_ERROR=12003
'在与Internet上的一些常用的服务器程序连接时,常用的端口号是.
'FTP协议服务器的端口号为21
PublicConstINTERNET_DEFAULT_FTP_PORT=21
'GOPHER协议服务器的端口号为70
PublicConstINTERNET_DEFAULT_GOPHER_PORT=70
'HTTP协议服务器的端口号为80
PublicConstINTERNET_DEFAULT_HTTP_PORT=80
'连接Internet服务的常数
PublicConstINTERNET_SERVICE_FTP=1
PublicConstINTERNET_SERVICE_GOPHER=2
PublicConstINTERNET_SERVICE_HTTP=3
'用于装载文件时间的结构
TypeFILETIME
dwLowDateTimeAsLong
dwHighDateTimeAsLong
EndType
'这个结构用于装载与找到的文件有关的具体信息
TypeWIN32_FIND_DATA
dwFileAttributesAsLong'文件的属性
ftCreationTimeAsFILETIME'文件的创建时间
ftLastAccessTimeAsFILETIME'文件的最后一次被读写的时间
ftLastWriteTimeAsFILETIME'文件的最后一次修改的时间
nFileSizeHighAsLong
nFileSizeLowAsLong
dwReserved0AsLong
dwReserved1AsLong
cFileNameAsString*MAX_PATH'用于存放文件名的字符串
cAlternateAsString*14
EndType
PublicConstERROR_NO_MORE_FILES=18
'连接FTP服务器的操作函数
'打开连接internet的会话
PublicDeclareFunctionInternetOpenLib"wininet.dll"Alias"InternetOpenA"_
(ByValsAgentAsString,ByVallAccessTypeAsLong,ByValsProxyNameAsString,_
ByValsProxyBypassAsString,ByVallFlagsAsLong)AsLong
'sAgent--要调用internet对话的应用程序名
'lAccessType--请求的访问的类型,包括:
'INTERNET_OPEN_TYPE_PRECONFIG-预配置(缺省)
'INTERNET_OPEN_TYPE_DIRECT-直接指向internet
'INTERNET_OPEN_TYPE_PROXY-通过代理服务器连接
'sProxyName--如果lAccessType被设置为INTERNET_OPEN_TYPE_PROXY,该参数
'为代理服务器的名字
'sProxyBypass--包含一系列代理服务器地址的字符串
'lFlags--会话的选项,可包括下列值:
'INTERNET_FLAG_DONT_CACHE--不对数据进行本地缓冲或通过网关服务器缓冲
'INTERNET_FLAG_ASYNC--
'当操作完成时,将同INTERNET_STATUS_REQUEST_COMPLETE一起进行一个状态
'回调
'INTERNET_FLAG_OFFLINE--只通过永久缓冲进行下载操作
'打开一个根据连接类型的Internet连接
PublicDeclareFunctionInternetConnectLib"wininet.dll"Alias"InternetConnectA"_
(ByValhInternetSessionAsLong,ByValsServerNameAsString,ByValnServerPortAsInteger,_
ByValsUsernameAsString,ByValsPasswordAsString,ByVallServiceAsLong,_
ByVallFlagsAsLong,ByVallContextAsLong)AsLong
'hInternetSession--函数InternetOpen()打开Internet对话返回的值
'sServerName--要连接的服务器的名称或IP
'nServerPort--该连接的Internet端口
'sUsername--登录的用户帐号
'sPassword--登录的口令
'lService--要连接的服务器类型(这里是连接FTP服务器,连接的类型为常数'INTERNET_SERVICE_FTP)
'关闭Internet连接
PublicDeclareFunctionInternetCloseHandleLib"wininet.dll"_
(ByValhInetAsLong)AsInteger
'hInet--InternetConnect()函数返回的值
'文件查找操作函数
'在FTP连接中查找一个文件。
在调用此函数后取得第一个文件后,可以接着调用FtpFindNextFile()
'获得下一个查到的FTP服务器上的文件。
PublicDeclareFunctionFtpFindFirstFileLib"wininet.dll"Alias"FtpFindFirstFileA"_
(ByValhFtpSessionAsLong,ByVallpszSearchFileAsString,_
lpFindFileDataAsWIN32_FIND_DATA,ByValdwFlagsAsLong,ByValdwContentAsLong)AsLong
'lpszSearchFile--指向要搜索的文件名。
可以通配符*.*的形式。
'lpFindFileData--用于装载与找到的文件有关的具体信息
'dwFlags--数据传输的方式,通常设置为0(ASCII方式)
'继续由FtpFindFirstFile()函数发起的文件搜索操作
PublicDeclareFunctionInternetFindNextFileLib"wininet.dll"Alias_
"InternetFindNextFileA"(ByValhFindAsLong,_
lpvFindDataAsWIN32_FIND_DATA)AsLong
'hFind--FtpFindFirstFile()函数的返回值
'lpvFindData--用于装载与找到的文件有关的具体信息
'目录操作函数
'改变FTP服务器的当前目录。
PublicDeclareFunctionFtpSetCurrentDirectoryLib"wininet.dll"Alias_
"FtpSetCurrentDirectoryA"(ByValhFtpSessionAsLong,_
ByVallpszDirectoryAsString)AsBoolean
'lpszDirectory--包含要到达的目录名。
可以是相对的或绝对的路径。
'在ftp服务器上创建目录
PublicDeclareFunctionFtpCreateDirectoryLib"wininet.dll"Alias"FtpCreateDirectoryA"
(ByValhFtpSessionAsLong,ByVallpszDirectoryAsString)AsBoolean
'lpszDirectory--包含要创建目录的字符串,可以是一个相对路径或绝对路径
'取得ftp当前的目录的名字
PublicDeclareFunctionFtpGetCurrentDirectoryLib"wininet.dll"Alias"FtpGetCurrentDirectoryA"_
(ByValhFtpSessionAsLong,lpszCurrentDirectoryAsString,lpdwCurrentDirectoryAsLong)AsBoolean
'lpszCurrentDirectory--存放目录名字的字符串
'lpdwCurrentDirectory--目录名字字符串的字节数
'删除ftp服务器的一个目录
PublicDeclareFunctionFtpRemoveDirectoryLib"wininet.dll"Alias"FtpRemoveDirectoryA"_
(ByValhFtpSessionAsLong,ByVallpszDirectoryAsString)AsBoolean
'lpszDirectory--要删除的目录名称,可以是相对路径或绝对路径
'文件操作函数
'从ftp服务器上取得一个文件并保存在本地机器上,此函数包括了与从一个FTP服务器中读取一个文件
'并在本地保存等操作有关的所有功能
PublicDeclareFunctionFtpGetFileLib"wininet.dll"Alias"FtpGetFileA"_
(ByValhFtpSessionAsLong,ByVallpszRemoteFileAsString,_
ByVallpszNewFileAsString,ByValfFailIfExistsAsBoolean,ByValdwFlagsAndAttributesAsLong,_
ByValdwFlagsAsLong,ByValdwContextAsLong)AsBoolean
'lpszRemoteFile--包含FTP服务器中要读的文件名
'lpszNewFile--在本地机器中要创建的文件名
'fFailIfExists--当为TRUE时,如果文件已经存在,则调用失败
'dwFlagsAndAttributes--文件的属性
'dwFlags--文件的传输方式可能包括下列值:
'FTP_TRANSFER_TYPE_ASCII--使用可以将控制和格式信息转换到本地对应文件的'ASCII传输方式
'FTP_TRANSFER_TYPE_BINARY--使用把文件作为一个连续数据流传输的FTP图象传
'输方式,这种方式
'不区别在文件内部数据结构之间的任何分界(如行结束的回车标记)
'dwContext--要取回的文件的描述表标识符
'把一个文件上栽到FTP服务器上。
其中包括了要将一个文件上载到FTP服务器上所有
'的有关操作
PublicDeclareFunctionFtpPutFileLib"wininet.dll"Alias"FtpPutFileA"_
(ByValhFtpSessionAsLong,ByVallpszLocalFileAsString,_
ByVallpszRemoteFileAsString,_
ByValdwFlagsAsLong,ByValdwContextAsLo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 编程 FTP 微软 详实 案例 附带 源程序