2014-12-09 11 views
0

이미 많은 사이트를 검색했으며 대부분 C++ 또는 VB6을 사용하여 검색했습니다.WinInet을 사용하는 FTP 서버에 연결 테스트 VBNET

내 코드가 winInet API Vb.net을 사용하여 FTP 서버에 연결되는지 테스트하고 싶습니다.

우선 wininet.dll을 선언해야합니다.

하지만 연결이 이미 연결되어 있는지 알 수 없습니다.

Imports System.Net 
Imports System.IO 
Imports System.Net.Sockets 

Public Class Form1 
Public Declare Function internetopen Lib "wininet.dll" Alias "InternetOpenA" _ 
    (ByVal lpszAgent As String, _ 
    ByVal dwAccessType As Long, _ 
    ByVal lpszproxyName As String, _ 
    ByVal lpszproxyBypass As String, _ 
    ByVal dwflags As Long) As Long 

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 
Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Integer, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Integer, ByVal dwFlags As Integer, ByVal dwContext As Integer) As Boolean 
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hFtpSession As Integer, ByVal lpszLocalFile As String, ByVal lpszRemoteFile As String, ByVal dwFlags As Integer, ByVal dwContext As Integer) As Boolean 
Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, ByVal lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long 
Private Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, ByVal lpFindFileData As WIN32_FIND_DATA) As Long 
Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean 
Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String, ByVal lpdwCurrentDirectory As Long) As Long 


Private Structure FILETIME 
    Dim dwLowDateTime As Long 
    Dim dwHighDateTime As Long 
End Structure 

Private Structure WIN32_FIND_DATA 
    Dim dwFileAttributes As Long 
    Dim ftCreationTime As FILETIME 
    Dim ftLastAccessTime As FILETIME 
    Dim ftLastWriteTime As FILETIME 
    Dim nFileSizeHigh As Long 
    Dim nFileSizeLow As Long 
    Dim dwReserved0 As Long 
    Dim dwReserved1 As Long 
    Dim cFileName As String 
    Dim cAlternate As String 
End Structure 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

Dim INet As Long 
    Dim INetConn As Long 
    Dim RC As Boolean 
    Dim FileData As WIN32_FIND_DATA 
    Dim FileList As String 
    Dim MAX_PATH As Long = 0 


    Try 
     INet = internetopen("FTP_Backup", 1, vbNullString, vbNullString, 0) 
     INetConn = InternetConnect(INet, "FTP_SITE", 0, "USER", "PASSWORD", 1, 0, 0) 
     RC = FtpGetFile(INetConn, "/public_html/install.log", "D:\", False, 0, 0, 0) 

     If RC Then 
      MsgBox("Succed") 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
End Sub 
End Class 
+0

파일 이름을 3 매개 변수로 전달해야하므로 FtpGetFile이 실패할지 확실하지 않습니다. D : \는 로컬로 파일을 만들 수있는 유효한 이름이 아닙니다. D : \ + localFileName과 같아야합니다. – Mathemats

답변

0

경우 InternetConnect()의 경우 연결 성공하는 경우, 그리고 NULL 그렇지 않으면 세션에 대한 핸들을 반환

여기 내 코드입니다. 따라서 연결이 이미 연결되어 있는지 테스트하려면 연결을 시도한 후에 확인하십시오.

Try 
    INet = internetopen("FTP_Backup", 1, vbNullString, vbNullString, 0) 
    INetConn = InternetConnect(INet, "FTP_SITE", 0, "USER", "PASSWORD", 1, 0, 0) 

    If (INetConn = NULL) then 
     'Throw an error, we have failed to connect 
    End If 

    RC = FtpGetFile(INetConn, "/public_html/install.log", "D:\", False, 0, 0, 0) 

    If RC Then 
     MsgBox("Succed") 
    End If 
Catch ex As Exception 
    MsgBox(ex.ToString) 
Finally 
    InternetCloseHandle(INet) 
End Try  

또한 웹 호출을 정리하지 않으려면 InternetCloseHandle을 호출하십시오.

+0

1 질문하시기 바랍니다. INet = internetopen ("FTP_Backup", 1, vbNullString, vbNullString, 0) "FTP_Backup"이란 무엇인지 알고 싶습니다. 사이트에서 가져 왔습니다. 그래서 나는 그것이 무엇인지 모릅니다. –

+0

@LeonardFebrianto Google API를 사용하면 API에 관한 많은 정보를 찾을 수 있습니다. InternetOpen()의 첫 번째 매개 변수는 HTTP 프로토콜에 지정된 에이전트입니다. 다른 말로하면 웹 사이트/서버가 말하는 내용을 알고 있기 때문입니다. – Mathemats