请如何使用WININET(api)或Internet Transfer(控件)

xjbx
博客专家认证
2003-07-10 11:35:25
如何用他们上传文件?
...全文
73 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjbx 2003-07-15
  • 打赏
  • 举报
回复
没人可以帮助我么?
xjbx 2003-07-10
  • 打赏
  • 举报
回复
这个资料我有
我是想用http 协议做?如何实现呢?
lxqlogo0 2003-07-10
  • 打赏
  • 举报
回复

用Internet Transfer编写FTP程序

  常上网的人都对FTP熟悉得不能再熟悉了,它是文件传输协议的英文缩写,所谓文件传输协议就是人们规定的在网络间传输文件的一组规定,里面规定了数据包的格式、数据包头部结构、命令结构等等。其实要想实现FTP的功能并不是很难,下面我们就来介绍一下如何作一个简单的Windows界面的FTP程序。

  其实我们常用的VC和VB等开发工具就可以轻松搞定,下面我们就来说说在VB中使用Microsoft Internet Transfer控件实现FTP的功能。

  Internet Transfer控件,支持HTTP(超文本传输协议)和FTP(文件传输协议),超文本传输协议就是我们的浏览器传输网页时使用的协议,也就是说你也可以用它作一个浏览器。我们这里主要讨论文件传输协议FTP。

  首先创建一个新工程,在你的工具箱上添加Microsoft Internet Transfer控件,并放到你的主窗体上,注意看它的属性:

  Protocol指所用的协议,我们这里选2-icFTP,就是FTP协议。

  UserName和Password是这样的:UserName和Password都给null或“"时,发送到FTP Server的UserName是“anonymous",Password是用户的Email,当UserName给null或“",而Password为非空字符串时是错误的,其他情况正常。

  RemoteHost写FTP Server(就是你要连到的那台主机,你可以在程序中动态地给这个属性赋值,以适应连接到不同的主机上)的域名地

  址或IP,RemotePort在你指定FTP协议时自动被设置成21,URL属性由RemoteHost、RemotePort、Protocol等几个属性内容组合而成,如果前面已经给出这些值,VB会自动生成URL,以上这些属性均可以在程序中动态赋值,使你可以更灵活地运用这个控件。

  下面说说这个控件的方法(Method):

  1、OpenURL,调用该方法会连通FTP Server属性中指定的主机,并返回它的Welcom Message,一般是一些欢迎词和当前有多少用户登录等信息。

  2、Execute方法用于执行对远程服务器的请求,它能发送对特定协议有效的请求,对于FTP协议来说,有效的操作有:

  CD file1

  改变目录。改变到file1中指定的目录。

  CDUP

  改变到父目录。等效于“CD...”

  CLOSE

  关闭当前的FTP连接。

  DELETE file1

  删除file1中指定的文件。

  DIR,LS file1

  搜索file1中指定的目录(允许用通配符,但要使用远程主机的语法)。如果没有指定file1,将返回当前的整个工作目录。使用GetChunk方法返回目录数据。

  GET,RECV file1 file2

  检索file1中指定的远程文件,并创建file2中指定的新本地文件。

  MKDIR file1

  创建目录。创建file1中指定的目录。创建是否成功取决于用户在远程主机上的权限。

  PUT,SEND file1 file2

  复制file1指定的本地文件到file2指定的远程主机上。

  PWD

  打印工作目录。返回当前目录名。使用GetChunk方法返回数据。

  QUIT

  终止当前用户。

  RENAME file1 file2

  将file1中命名的远程文件重命名为file2中指定的新名称。成功与否取决于用户在远程主机上的权限。

  RMDIR file1

  删除目录。删除file1中指定的远程目录。成功与否取决于用户在远程主机上的权限。

  SIZE file1

  返回file1指定的目录的大小。

  举个例子:

  Inet1.Execute“",“dir"

  debug.print Inet1.GetChunk这一句将打印出上一句dir的结果。

  Inet1.Execute“",“Get file1 C:\File1"这个命令会把对方c:\File1的文件取到本机当前目录下(这里假设对方是windows base的机器,并且有c:\File1的文件)。

  下面说说该控件唯一的事件StateChanged。

  当这个FTP连接中状态发生了改变,如登录成功、命令接收成功、断线等等都会引发该事件。该事件的处理函数有一个参数state,表明当前连接状态,它的值定义如下:

  值标识符意义

  0 icNone无状态可报告。

  1 icHostResolvingHost该控件正在查询所指定的主机的IP地址。

  2 icHostResolved该控件已成功地找到所指定的主机的IP地址。

  3 icConnecting该控件正在与主机连接。

  4 icConnected该控件已与主机连接成功。

  5 icRequesting该控件正在向主机发送请求。

  6 icRequestSent该控件发送请求已成功。

  7 icReceivingResponse该控件正在接收主机的响应。

  8 icResponseReceived该控件已成功地接收到主机的响应。

  9 icDisconnecting该控件正在解除与主机的连接。

  10 icDisconnected该控件已成功地与主机解除了连接。

  11 icError与主机通讯时出现了错误。

  12 icResponseCompleted该请求已经完成,并且所有数据均已接收到。

  用Select case语句处理各个状态就行了。

  怎么样,是不是很简单呀,一个简单的FTP你只须建立连接,从用户读取命令,用Execute方法将命令传送到对方主机就可以了,剩下的活都有Inet控件帮你搞定,但是要作得好用,还要处理各种网络错误,用递归处理子目录上载或下载,为用户建立FTP服务器的地址簿等,这里不做更深一步讨论。




xjbx 2003-07-10
  • 打赏
  • 举报
回复
没人知道嚒?
'模板: Option Explicit Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _ (ByVal sAgent As String, ByVal LAccessType As Long, ByVal sProxyName As String, _ ByVal SProxyBypass As String, ByVal lFlags As Long) As Long Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _ (ByVal hInternetSession As Long, ByVal sServerName As String, _ ByVal nServerPort As Integer, ByVal sUsername As String, _ ByVal sPassword As String, ByVal lService As Long, _ ByVal lFlags As Long, ByVal lContext As Long) As Long Public Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _ (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _ ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _ ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _ ByVal dwContext As Long) As Boolean Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _ (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _ ByVal lpszRemoteFile As String, ByVal dwFlags As Long, _ ByVal dwContext As Long) As Boolean Public Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" _ (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean Public Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _ (ByVal hFtpSession As Long, ByVal lpszExsiting As String, ByVal lpszNew As String) As Boolean Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _ (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _ lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _ ByVal dwContent As Long) As Long Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _ (ByVal hFind As Long, lpvFndData As WIN32_FIND_DATA) As Long Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Public Type WIN32_FIND_DATA dwFilAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cFileName As String * 260 cAlternate As String * 14 End Type Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _ "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type '窗体: Private Sub Command1_Click() 'FTP下载 lnginet = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, _ vbNullString, vbNullString, 0&) If lnginet Then lnginetconn = InternetConnect(lnginet, "219.131.192.243", 0, _ "posui", "djposui", 1, 0, 0) If lnginetconn Then blnRC = FtpGetFile(lnginetconn, "/load.txt", "c:\load.txt", 0, 0, 1, 0) If blnRC Then MsgBox "download ok!!!" End If InternetCloseHandle lnginetconn InternetCloseHandle lnginet MsgBox "close ok!!!" Else MsgBox "can't connect" End If Else MsgBox "ftp wrong" End If End Sub Private Sub Command2_Click() 'FTP上传 lnginet = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, _ vbNullString, vbNullString, 0&) If lnginet Then lnginetconn = InternetConnect(lnginet, "219.131.192.243", 0, _ "administrator", "vai8888", 1, 0, 0) If lnginetconn Then blnRC = FtpPutFile(lnginetconn, "c:\1.txt", "/1.txt", 0, 0) If blnRC Then MsgBox "download ok!!!" End If InternetCloseHandle lnginetconn InternetCloseHandle lnginet MsgBox "close ok!!!" Else MsgBox "can't connect" End If Else MsgBox "ftp wrong" End If End Sub 方法2: '部件INET Private Sub Command1_Click() Me.Inet1.Execute Me.Inet1.URL, "send c:\11.txt /1.txt" '保存 End Sub Private Sub Command2_Click() Me.Inet1.Execute Me.Inet1.URL, "get /2.txt c:\2.txt" '下载 End Sub

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧