Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用wininet.dll检索FTP命令输出_Vb.net - Fatal编程技术网

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

Vb.net 使用wininet.dll检索FTP命令输出,vb.net,Vb.net,我试图找到一种通过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

我试图找到一种通过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

谢谢。

我想你可能会发现它是C++定义的一个链接。 (通过导航找到)但提供了一个有用的提示

它说:

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