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

タイトル Re^4: wininet.dllを使用したftpについて
投稿日: 2010/08/25(Wed) 10:13
投稿者エイジ
魔界の仮面弁士様、お返事ありがとうございます。

> エラーの発生箇所は、FtpPutFile の実行時でしょうか?
> (InternetOpen や InternetConnect は問題なし?)
>
エラーというより Private Declare Function InternetOpen Lib "wininet.dll" Alias
などの戻り値を見てゼロの場合は、エラーと判断しています。
(ネットで見つけたままのソースをそのまま使用しているため理由は分かりません)
InternetOpenの戻り値は13369348、InternetConnectの戻り値は13369352、
FtpPutFileの戻り値はゼロになっています。
戻り値がゼロの場合、その原因を探すため、InternetGetLastResponseInfoで
エラーの内容を取得しています。

> IntPtr にしたのではありませんでしたっけ。
ftp関係ではIntegerは使用せずIntPtrを使用したほうがいいということでしょうか。
全てIntPtrにしましたが、結果は変わりません。

> InternetOpen にしても InternetConnect にしても、
> その戻り値はインターネットハンドル(HINTERNET)ですよね。
インターネットハンドル(HINTERNET)かは不明ですが、以下のAPIで取得しています。
    ' API定義
    Private Declare Function InternetOpen Lib "wininet.dll" Alias _
        "InternetOpenW" (ByVal sAgent As String, ByVal lAccessType As IntPtr, _
         ByVal sProxyName As String, ByVal sProxyBypass As String, _
         ByVal lFlags As IntPtr) As IntPtr
    Private Declare Function InternetConnect Lib "wininet.dll" Alias _
        "InternetConnectW" (ByVal hInternetSession As IntPtr, _
         ByVal sServerName As String, ByVal nServerPort As IntPtr, _
         ByVal sUsername As String, ByVal sPassword As String, _
         ByVal lService As IntPtr, ByVal lFlags As IntPtr, _
         ByVal lContext As IntPtr) As IntPtr

> > 実行機とftpサーバとのやりとり時にエラーになります。
> Port 21 でのコマンド送受信はできているものの、
> Port 20(等)でのデータ交換に失敗している感じでしょうか。
>
> ・今回、INTERNET_FLAG_PASSIVE は使いますか? 使いませんか?
> ・サーバー側の FTP アクセスログに、T-01A からの接続は記録されていますか?
> ・CE 機用の FTP ツール(SyncFTP等)を使っての送受信はできますか?
INTERNET_FLAG_PASSIVEは使用しません。
サーバー側の FTP アクセスログには、T-01Aから[USER]と[PASS]のログは記録されています。
SyncFtpをT-01Aにインストールしました。
接続時と切断時に、[正規表現変換でエラーが発生しました]という
メッセージがたくさん表示され、Server側のファイルが全てフォルダになり、名前も
Dateも空白になっています。
Localは正常に表示されていますのでアップロードを試しましてが、接続時と切断時に
出る[正規表現変換でエラーが発生しました]が表示されましたが、サーバを直接見ると
正常にアップロードされていました。

以上、よろしくお願い致します。

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

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