OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

FTP対応のアプリケーション

  • すぐに回答を!
  • 質問No.229365
  • 閲覧数518
  • ありがとう数7
  • 気になる数0
  • 回答数7
  • コメント数0

お礼率 66% (82/123)

INETコントロールを使って、サーバとファイルの送受信をするアプリを作りたいのですが、基本的なところでつまづいています。

サンプルプログラムを見つけたので試してみているのですが。
以下。

Private Sub cmdDownload_Click()
Dim GetBuf() As Byte
Dim FileNum As Integer

GetBuf() = Inet.OpenURL(txtURL.Text, icByteArray)
FileNum = FreeFile
Open txtSavePath.Text For Binary Access Write As FileNum
Put #FileNum, , GetBuf()
Close #FileNum
MsgBox "ダウンロード終了"
End Sub

ここで、txtURL.Text に何を記述したらいいのか、はっきり分かりません。
サーバー名にファイルのあるディレクトリを付けた形、
ftp://servername/home/tmp/test.txt
サーバーのIPアドレスにファイルのあるディレクトリを付けた形、
ftp://172.20.1.17/home/tmp/test.txt
を試してみたのですが、うまくダウンロードできません。

目的のプログラムは Executeメソッドを使ってファイルの送受信をしたいのですが、どちらにしてもURLの記述ができないとダメなのですよね?
どうぞ、よろしくお願いいたします。
通報する
  • 回答数7
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル12

ベストアンサー率 65% (276/422)

ご指名ありがとうございます。(←変な飲み屋みたい)

こんな感じ?
  With Inet1
    .URL = "ftp://ftp.hoge.com"
    .UserName = "TAGOSAKU7"
    .Password = "内緒"
    .Execute , " DIR"
  End With

UserNameとPasswordは、ExecuteかOpenURLを発行すると同時に送られているようです。
UserNameが空状態であれば "anonymous"を送っているようです。

でも、
>"ftp://user:pwd@URL"
使用方法によってはいいと思いますよ。
画面にさえ表示しなければ・・・


それと、、、
受けのサーバのポートは特に意識する必要はないと思います。
WinSockでもないので、ソケットのことを考える必要もないし、手順を間違わなければサーバに設定を施さなくてもできると思います。
補足コメント
lily02

お礼率 66% (82/123)

ありがとうございます。
早速試してみます。
仕事先のことなので結果のご報告は夕方になりますが。
投稿日時 - 2002-03-06 13:49:53
お礼コメント
lily02

お礼率 66% (82/123)

ありがとうございました。

Inet.OpenURL ではうまくいかないのですが、Inet.Execute ではうまくいきました。一行で書くと
Inet.Execute "ftp://username:password@hostname", "GET test.lzh e:\tmp\test.lzh"
みたいな感じです。
GET(ダウンロード)もPUT(アップロード)もこれでいけました。

もちろん
  With Inet1
    .URL = "ftp://ftp.hoge.com"
    .UserName = "TAGOSAKU7"
    .Password = "内緒"
    .Execute , " DIR"
  End With
の書き方でもOKでした。

ところが、問題点がふたつ。

1.ダウンロードやアップロードが終わってアプリケーションを終了するときに、
  Inet.Cancel を記述しているのですが、5秒ぐらいかかります。
  Private Sub Inet.StateCanged(Byval State As Integer) を記述すると
  なぜかすぐ終わります。解せません。
2.GET と PUT はうまくいくのですが、CD や DIR がちゃんと動きません。

まだ、分かっていないところがあるのだと思います。
またいろいろとやってみますが、何かお気づきのことがありましたらお教えください。取り敢えずお礼まで。
投稿日時 - 2002-03-06 18:56:32
-PR-
-PR-

その他の回答 (全6件)

  • 回答No.2
レベル13

ベストアンサー率 59% (729/1235)

参考URLと比べてみてもソースに問題はないと思います。 txtURL.text = "ftp://ftp.microsoft.com/developr/drg/Win32/Autorun.zip" としたら動きませんか? ...続きを読む
参考URLと比べてみてもソースに問題はないと思います。

txtURL.text = "ftp://ftp.microsoft.com/developr/drg/Win32/Autorun.zip"

としたら動きませんか?
補足コメント
lily02

お礼率 66% (82/123)

ありがとうございます。
サーバはUnix形OS(Soralis)なのです。
ネットワークが繋がっていて、ホスト名(もしくはIPアドレス)が分かっていればFTPポート(21)を使って、FTP送受信できると思っているのですが違うのでしょうか?
投稿日時 - 2002-03-06 12:17:37


  • 回答No.1
レベル12

ベストアンサー率 65% (276/422)

今は時間がないのでサンプルを書けないのですが・・・ コードを見るとコマンドボタンのイベントのソースであるように見えますが、ちょっと書くところが違うような気がします。 バッファは何分割かで受信が行われと思ったのですが・・・ Inetの名前を忘れたけどイベント内に GetBuf() = Inet.OpenURL(txtURL.Text, icByteArray) を書くように思ったんだけど ...続きを読む
今は時間がないのでサンプルを書けないのですが・・・

コードを見るとコマンドボタンのイベントのソースであるように見えますが、ちょっと書くところが違うような気がします。

バッファは何分割かで受信が行われと思ったのですが・・・
Inetの名前を忘れたけどイベント内に
GetBuf() = Inet.OpenURL(txtURL.Text, icByteArray)
を書くように思ったんだけど、違ったらすいません。


それと・・・質問とは無関係の余談ですが・・・
cmdDownload_Click
と書いてあるのを見て、コマンドボタンのクリックイベントだと、すぐわかりました。
コーディング規則に沿ったネーミングをされてると、大変質問も理解しやすいですね。
補足コメント
lily02

お礼率 66% (82/123)

ありがとうございます。
返事をいただけて嬉しいです。
お時間のあるときにサンプルもいただけるとなお嬉しいです。
今日も色々と試しているのですがうまくいきません。
何らかのエラーが生じていると思うのですが、
On Error GoTo でも検出されず手がかりがなくて困っています。
どうぞよろしくお願いいたします。
投稿日時 - 2002-03-05 22:03:22
  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

OpenURLでの取得 これは、ブラウザと同じように [ファイルにアクセス]して[保存] という処理です。 どうやらファイル転送とは違い、擬似的な転送と言えます。 なので送信ができません。 FTP接続でのファイル転送は、OpenURLを使用しないで、コマンドで行います。 http://www.microsoft.com/JAPAN/developer/library/ ...続きを読む
OpenURLでの取得
これは、ブラウザと同じように
[ファイルにアクセス]して[保存]
という処理です。

どうやらファイル転送とは違い、擬似的な転送と言えます。
なので送信ができません。


FTP接続でのファイル転送は、OpenURLを使用しないで、コマンドで行います。



http://www.microsoft.com/JAPAN/developer/library/Inet98/vbmthinetexecutemethod.htm

http://www.microsoft.com/JAPAN/developer/library/Inet98/vbmthexecutex.htm

に解説とサンプルが出ています。
  • 回答No.4
レベル13

ベストアンサー率 59% (729/1235)

>サーバはUnix形OS(Soralis)なのです。 それなら、ユーザー名とパスワードを入れる必要があるのでは? "ftp://user:pwd@172.20.1.17/home/tmp/test.txt" で動きませんか? しかし、この方法はセキリティ上問題があるのでお勧め出来ない。 INETコントロールでユーザー名とパスワードを指定するのは どうす ...続きを読む
>サーバはUnix形OS(Soralis)なのです。

それなら、ユーザー名とパスワードを入れる必要があるのでは?

"ftp://user:pwd@172.20.1.17/home/tmp/test.txt"

で動きませんか?
しかし、この方法はセキリティ上問題があるのでお勧め出来ない。

INETコントロールでユーザー名とパスワードを指定するのは
どうするのでしょうか? >TAGOSAKUさん
補足コメント
lily02

お礼率 66% (82/123)

ありがとうございます。
早速試してみます。
仕事先のことなので結果のご報告は夕方になりますが。
投稿日時 - 2002-03-06 13:47:38
お礼コメント
lily02

お礼率 66% (82/123)

どうもありがとうございました。
当所の目的(アップロードとダウンロード)の半分はクリアーできました。
問題点をNo5.のTAGOSAKUさんの方へ書きました。
よろしくご指導をお願いいたします。
投稿日時 - 2002-03-06 18:59:29
  • 回答No.6
レベル12

ベストアンサー率 65% (276/422)

※追記質問1について ごめんなさい。。。 Inetコントロールでは、「ちょっと勉強」と思って触れたぐらいで、内部構造は予想したこともありません。 内部はwininet.dllを参照したAPI郡だと思うのですが、それを追っていったらわかると思います。 ぼくは(4ヶ月経ってまだ作りかけの)FTPソフトはWSock32.dllを使用しています。権限などがInetではできない(と思っている)からです。 ...続きを読む
※追記質問1について
ごめんなさい。。。
Inetコントロールでは、「ちょっと勉強」と思って触れたぐらいで、内部構造は予想したこともありません。
内部はwininet.dllを参照したAPI郡だと思うのですが、それを追っていったらわかると思います。
ぼくは(4ヶ月経ってまだ作りかけの)FTPソフトはWSock32.dllを使用しています。権限などがInetではできない(と思っている)からです。

http://www.mitene.or.jp/~sugisita/family/papa/vb/
コンポーネント→FTPクラス

ここのサンプルを解読するか、あるいはクラスファイルになっているので、そのままプロジェクトに追加をしてしまう方がよいかも?


※追記質問2について
すいません。CDもDIRもできたのですが・・・
何がどううまくいかないのかわかりません。
コードと、症状を教えてくれたらわかるかも?
補足コメント
lily02

お礼率 66% (82/123)

ありがとうございます。
昨夜、本を改めて読んでみてわたしの使い方が間違っているのだと思いました。
というのは、OpenURL のサンプルコードを改変して Execute をやっていたので、次のようなコードで試していました。

Private Sub cmdDownload_Click()
  Dim FileName As String

  Inet.URL = "ftp://hostname"
  Inet.UserName = "username"
  Inet.Password = "password"
  Inet.Execute , "GET test.lzh " & filename
  MsgBox "ダウンロード終了"
End Sub

みたいな感じで。ところが本をよく読んでみたら

Private Sub cmdDownload_Click()
  Dim FileName As String

  Inet.URL = "ftp://hostname"
  Inet.UserName = "username"
  Inet.Password = "password"
  Inet.Execute , "GET test.lzh " & filename

  Do While Inet.StillExecuting = True
    DoEvents
  Loop
  MsgBox "ダウンロード終了"
End Sub

のような感じで、同期をとって終了確認をしています。DIR も CD もそうです。わたしはただ単に Execute を発行していただけなのでここが原因だったかな、と午後にまた仕事先で確認したいと思います。

それと、ついでといっては申し訳ないのですがTAGOSAKU7さんはWinSockの方もお詳しそうなので「質問13」の「Socket通信で送信終了のイベントが発生しない」にもお知恵をいただけないでしょうか?図々しくて申し訳ありませんが。
投稿日時 - 2002-03-08 11:20:00
  • 回答No.7
レベル12

ベストアンサー率 65% (276/422)

なるほど・・・ でも、追記質問部分は自己解決できそうですね^^ サーバの戻りは基本的にStateChangedで行います。 もうひとつの質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=227737 については、そちらに書いておきます。(回答ではないけど・・・) ...続きを読む
なるほど・・・
でも、追記質問部分は自己解決できそうですね^^
サーバの戻りは基本的にStateChangedで行います。

もうひとつの質問
http://oshiete1.goo.ne.jp/kotaeru.php3?q=227737
については、そちらに書いておきます。(回答ではないけど・・・)
お礼コメント
lily02

お礼率 66% (82/123)

どうもありがとうございました。
お蔭様で同期をとることですべて解決しました。
アドバイスはとても有難かったです。
投稿日時 - 2002-03-08 20:52:34
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ