使用的wininet.dll检索FTP命令的输出

我试图寻找通过FTP检查用户统计的一个简单的方法,WININET似乎是最好的选择。 我如何得到该命令的输出关系吗?

Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal HINet As Integer) As Integer Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Integer) As Integer Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Integer, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Integer, ByVal lFlags As Integer, ByVal lContext As Integer) As Integer Public Declare Function ftpCommand Lib "wininet.dll" Alias "FtpCommandA" (ByVal hConnect As Integer, ByVal fExpectResponse As Boolean, ByVal dwFlags As Integer, ByVal lpszCommand As String, ByRef dwContext As Integer, ByRef phFtpCommand As Integer) As Boolean Dim INet, INetConn As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click INet = InternetOpen("MyFTP", 1, vbNullString, vbNullString, 0) INetConn = InternetConnect(INet, "192.168.1.6", 21, "user", "pwd", 1, 0, 0) strCommand = "SITE SHOW SERVER 192.168.1.6.21" Dim retv As Long Dim Test = ftpCommand(INetConn, True, 2, strCommand, 0, retv) Debug.Write(Test) InternetCloseHandle(INetConn) InternetCloseHandle(INet) End Sub

我期待的输出是:

Response: 200- Server IP = "192.168.1.6" Response: 200- Port = "21" Response: 200- Start time = "10/02/2010 02:46:57 PM" Response: 200- Download = "0.000 KB" Response: 200- Upload = "0.000 KB" Response: 200- Online Users = "0" Response: 200-====================================== Response: 200 Site command OK

谢谢。

--------------解决方案-------------

我想你可能会发现使用InternetGetLastResponseInfo的是一个链接到C ++定义

(由导航功能的WinINet列表中找到这一点),但提供了一个有用的提示

它说:

InternetGetLastResponseInfo功能

检索线程调用这个函数的最后一个错误描述或服务器的响应

考虑这个示例实现

Private Function GetServerResponse() As String
Dim lError As Long
Dim strBuffer As String
Dim lBufferSize As Long
Dim retVal As Long
retVal = InternetGetLastResponseInfo(lError, strBuffer, lBufferSize)
strBuffer = New String("", lBufferSize + 1)
retVal = InternetGetLastResponseInfo(lError, strBuffer, lBufferSize)
GetServerResponse = strBuffer
End Function

它调用外部函数(这里复制粘贴访问)

Declare Function InternetGetLastResponseInfo Lib "wininet" Alias "InternetGetLastResponseInfoA" (ByRef lpdwError As Long, ByVal lpszBuffer As String, ByRef lpdwBufferLength As Long) As Boolean

两次,一次以获得缓冲长度和再次填充缓冲区串然后返回填充的缓冲区

分类:vb.net 时间:2012-01-01 人气:0
本文关键词: vb.net
分享到:

相关文章

  • 使用System.Reflection.Emit.ILGenerator调用随机在VB.Net? 2012-01-01

    我生成从我自己的语言.NET可执行输出...这就是正从我的语言翻译操作码(称为"随机"),应该在特定范围内创建一个随机数. 我的代码的目标是使用System.Reflection.Emit.ILGenerator类...了解CIL代码看起来我已经创造了一些vb.net代码来生成随机数: Sub Main() Dim A As Random A = New Random Console.WriteLine(A.Next(100)) End Sub 这ILDASM报告如下: .method

  • .NET:界面问题VB.net消气唯一接口 2012-01-01

    为什么一个接口覆盖类定义并违反类的封装? 我已经包含下面的两个样品,一个在C#和一个在 VB.net? VB.net Module Module1 Sub Main() Dim testInterface As ITest = New TestMe Console.WriteLine(testInterface.Testable) ''// Prints False testInterface.Testable = True ''// Access to Private!!! Console.W

  • 智能感知在VB.NET工程C#用户控件 2012-01-01

    我创建,我想在VB.NET中使用..控制工作正常,一个C#用户控件,但在VB.NET的智能感知不显示任何C#的用户控制功能描述(在总结XML文档标签). 如果我使用相同的控制在C#项目中的智能感知显示每个功能的描述如预期.. 这正常吗? 谢谢 --------------解决方案------------- 这是正常的. 然而,在Visual Studio 2010中的C#和VB.NET的智能感知的支持要好得多. 我总是发现,智能感知VB.NET是缺乏在2008年,但VS 2010在这方面有所改善

  • 使用vb.net在VBScript 2012-01-01

    如何调用从VBScript在vb.net DLL中的函数? 我做了以下内容: - 创建一个名为Class1在vb.net公共类. 我去到Visual Studio 2008命令提示符,然后转到我的课的dll - C:\ MYAPP \斌\调试,之后键入tlbexp MYDLL.DLL下面的命令,我得到消息大会导出到C:\ MYAPP \斌\调试\ MYDLL. TLB I型以下命令regasm MYDLL.DLL,我得到以下信息RegAsm之后:警告RA0000:无类型登记 这就是我的课是这样的

  • 因为这VB6般的气味,这让VB.NET,而不是错误:WinFormType.InstanceProp =值[DISABLE My.Forms] 2012-01-01

    我已经注意到一些很讨厌的与VB.Net的治疗Winform的对象. 这已经丢弃几个小时我们的时间. 它只会变得更糟,因为我们有更多的是用来做这样的事情我们VB6的程序员,和autoconverted代码从VB6直行过带来的结构. 这是做事情能够接受的方式: Dim FormInstance as New FormClassName If FormInstance.ShowDialog() = DialogResult.OK then TheAnswer = FormInstance.TextBo

  • 与传统的ColdFusion 4.5 VB.NET消费Web服务 2012-01-02

    我的ColdFusion的遗留应用程序4.5需要消耗VB.NET Web服务,如果任何人使用的是ColdFusion CFWDDX ACTION ="WDDX2CFML"取得了成功反序列化XML我想知道 我还没有成功,但并希望任何代码示例,因为我不能用CFINVOKE. --------------解决方案------------- 什么是您使用的序列化VB.Net数据? 如果你还没有发现这样做的一个体面的手段,那么这个库:http://boncode.blogspot.com/201

  • 宏重复加入 - VB脚本封闭。 2012-01-02

    嗨里克(里克·罗斯坦) 以下是你跟我上周共有的脚本. 此宏平均需要40至50分钟来运行. 这是一个正常的运行时间考虑,我有超过150列2500行? 认为是我不知道多久它通常应我会提出这个问题. 子CollapseData() 昏暗上校作为范围,RNG作为范围,CurrentID作为字符串 昏暗×如龙,LASTROW长,STARTROW长,BeginRow只要 STARTROW = 2 在错误恢复下一页 BeginRow = STARTROW 做虽然莱恩(细胞(BeginRow,"A")

  • 如何从VB.Net读取Excel单元格 2012-01-03

    如何从Excel文件读取特定的细胞使用OLEDB连接用VB.NET? 你能告诉我的示例代码? 提前致谢! 最佳reagrds,thlaing --------------解决方案------------- 试试下面的C#代码: Dim MyCommand As System.Data.OleDb.OleDbDataAdapter Dim MyConnection As System.Data.OleDb.OleDbConnection MyConnection = New System.Data

  • 不能添加到阵列(需要使用new关键字)在VB.NET 2012-01-03

    我有一个属性,它是项目的阵列,但是当我来到一个项目添加到阵列中,它说我必须使用new关键字,但我不能用一个新的关键字与属性. ( item是一个自定义类). Private itemsvalue As item() Public Property Items() As item() Get Return itemsvalue End Get Set(ByVal value As DBPFindexitem()) itemsvalue = value End Set End Property Su

  • 在VB.Net参考 2012-01-03

    有点不清楚我是引用(指针?),以班级在VB.Net. 我要问的问题可以通过测试的一点点来回答,但我想知道如果任何人都可以发布一个体面的解释(或链接,太). 如果你创建一个类: Public Class ReferenceClass Private myBooleanValue As Boolean = False Public Property BooleanValue As Boolean Get Return myBooleanValue End Get Set(value As Boole

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.350 (s). 10 q(s)