tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル wininet.dllを使用したftpについて
投稿日: 2010/08/24(Tue) 10:06
投稿者エイジ
いつも参考にさせていただいています。エイジと申します。
以下の環境で開発しております。
言語 VB2008 Compact Framework Ver3.5
開発OS WindowsXp SP3
実行機OS WindowsMobile6.5 Professional
ftpサーバのOS WindowsServer2003

Compact Framework Ver3.5にftpクラスがないためwininet.dllを使用して
ftp処理をしたいと思っています。
色々なホームページを検索しましてその中にあるソースを見つけまして
それを利用しようとしました。(記載のあったホームページは覚えていません)
ftpの接続や、接続先でのフォルダの作成、移動、削除及びファイルの移動は
正常に処理されたのですが(ftpサーバのフォルダやファイルで確認)、ファイル
のftpサーバからのダウンロード及びftpサーバへのアップロードが正常に処理
されません。Err.LastDllErrorでエラー内容を取得したところ以下のような
エラーになっていました。
エラーコード:122
エラー内容:200 Type set to I. 500 Invalid PORT Command
エラーの原因や対処方法など教えて頂けないでしょうか。
よろしくお願い致します。

ソースを抜粋しまして以下に記載します。
    ' API定義
    Private Declare Function InternetOpen Lib "wininet.dll" Alias _
        "InternetOpenW" (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 _
        "InternetConnectW" (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 _
        "FtpGetFileW" (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 Integer
    Private Declare Function FtpPutFile Lib "wininet.dll" Alias _
        "FtpPutFileW" (ByVal hFtpSession As Integer, ByVal lpszLocalFile As String, _
         ByVal lpszRemoteFile As String, ByVal dwFlags As Integer, _
         ByVal dwContext As Integer) As Integer


            Dim strServer As String    'ftpサーバ名
            Dim strUser As String    'ユーザ名
            Dim strPswd As String    'パスワード
            Dim strLocalPath As String    'ローカルファイルのフルパス
            Dim strRemotePath As String    'ftpサーバファイルのパス

            ' インターネットオープン(FTPサーバ接続準備)
            lngInternetOpen = InternetOpen("WININET", _
                INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
            If lngInternetOpen = 0 Then
                MsgBox("インターネットオープン" & Err.LastDllError.ToString)
                Exit Function
            End If

            ' FTPサーバ接続
            Dim lngPassive As Long : lngPassive = 0
            If blnPassive Then lngPassive = INTERNET_FLAG_PASSIVE
            lngInternetConnect = InternetConnect( _
                lngInternetOpen, strServer, INTERNET_INVALID_PORT_NUMBER, _
                strUser, strPswd, INTERNET_SERVICE_FTP, lngPassive, 0)
            If lngInternetConnect = 0 Then
                MsgBox("FTPサーバ接続" & Err.LastDllError.ToString)
                Exit Function
            End If

            ' バイナリまたはアスキーモードの設定
            Dim lngtype As Long
            lngtype = FTP_TRANSFER_TYPE_BINARY
            ' ファイルをFTPサーバへ送信
            Dim lngRtn As Long
            lngRtn = FtpPutFile(lngInternetConnect, _
                strLocalPath, strRemotePath, lngtype, 0)
            If lngRtn = 0 Then
                Dim errer As String
                Dim errlen As Integer
                InternetGetLastResponseInfo(Err.LastDllError, vbNullString, errlen)
                errer = New String(Chr(0), errlen + 1)
                InternetGetLastResponseInfo(Err.LastDllError, errer, errlen)

                MsgBox("ファイルをFTPサーバへ送信" & Err.LastDllError.ToString & "/" & errer)
                Exit Function
            End If

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。