FTPからの切断

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: FTPからの切断

by ノッチ » 2006年7月13日(木) 12:43

> 自己レスです。
> WINSOCKを使ってSendで送るしかない様です。
> せっかく便利なAPIなのに、全て自分で作るしかなさそうです。
> RFC959では、221 Quitは必修コマンドなんですけどねぇ。
> 久しぶりにMSCのイケズに直面しました。

MSDNを調べるとFtpCommandというコマンドがありましたが、
MSDNではWindows CE用となっており、「残念」
っと思っていたらWindows環境でも使えるようです。

Declare宣言は
Declare Function FtpCommand Lib "wininet" Alias "FtpCommandA" (ByVal hFtpSession As Long,ByVal fExpectResponse As BOOL,ByVal dwFlags As Long,ByVal lpszCommand As String,ByVal lContext As Long,ByRef phFtpCommand As Long) As BOOL

こんな感じでしょうか。(ちょっと適当です)

by 超初心者 » 2006年7月07日(金) 18:03

自己レスです。
WINSOCKを使ってSendで送るしかない様です。
せっかく便利なAPIなのに、全て自分で作るしかなさそうです。
RFC959では、221 Quitは必修コマンドなんですけどねぇ。
久しぶりにMSCのイケズに直面しました。

FTPからの切断

by 超初心者 » 2006年7月06日(木) 20:59

FTPの切断で教えてください。

コードは、SPIRIT様のサイト・WinTipsに有る「FTPサーバ経由でファイルを落とす」そのままなので、著作の問題を感じさしひかえます。
概要は、下記の感じです。(そのままですが・・・)

1, open=InternetOpen(0,0,0,0,0)
2, ftp=InternetConnect(open,"192.168.0.1",21,"test","test",INTERNET_SERVICE_FTP,0,0)
3, ack=FtpGetFile(ftp,"test.bmp","D:\test\test.bmp",TRUE,_
4, InternetCloseHandle(ftp)
5, InternetCloseHandle(open)

プログラムはうまく動作するのですが、4のハンドルクローズ時に、FTPサーバに「ソケットの接続が失われた」とエラーがでます。(まぁ、ソケットを切った訳なので・・・・)

しかし、コマンドプロンプトよりFTP→Bin→Get→Quitの手順で切断した時はエラーが出ません。
パケットモニタで比較してみると、Quitコマンド実行にFTP(PORT21)へQUIT→ACK→GootBye→Ackを行った後にFlagsでResetフラグを通知をしていました。(プログラムではInternetCloseHandle時に、いきなりFlagsでReset を通知しているので強制的に回線が切れたとFTPサーバ様は御怒りです。)

Dosコマンドと同じ事をABで行いたく該当するFTP系のAPIを探しまわりましたが見つかりません。(VBやC++関係のTipsでも、SPIRIT様と同様の手順で、Quitを行うサンプルは見つかりませんでした。)
なんとか、FTPへQuit→GootByeを送信する方法はありませんか??(FTPサーバが、I/OをFTPで通知する専用ハードでして、切り方が悪いと手動でリセット操作を行う必要があります。)

よろしくお願いいたします。

ページトップ