C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.3608 の関連記事表示

<< 0 >>
■3608  FTP転送について
□投稿者/ うっちー -(2007/05/17(Thu) 10:26:32)

    分類:[VB.NET (Windows)] 

    現在、WindowsApplicationにてFTP転送を行う処理を作成しているのですが、デバッグを
    しながらFTP転送を行うと正常に転送できるのですが、Releaseをしたexeで実際にテスト
    するとFTP転送が出来ません。 OSは、WindowsXP でVBは、VB.NET 2003です。

    以下ソースです。
    Dim Writer1 As StreamWriter, Writer2 As StreamWriter
    Dim results As String
    Dim psi As New System.Diagnostics.ProcessStartInfo
    Dim FTPcmd As String = Path.GetTempFileName
    Dim myProcess As Process = Process.Start(psi)

    Writer1 = New System.IO.StreamWriter(FTPcmd, False, System.Text.Encoding.Default)
    Writer1.WriteLine("open 172.XX.X.XXX")
    Writer1.WriteLine("ユーザーID")
    Writer1.WriteLine("パスワード")
    Writer1.WriteLine("bin")
    Writer1.WriteLine("put D:\Test\TEST.txt")
    Writer1.WriteLine("quit")
    Writer1.Close()

    psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
    psi.RedirectStandardInput = False
    psi.RedirectStandardOutput = True
    psi.UseShellExecute = False
    psi.CreateNoWindow = True
    psi.Arguments = "/c ftp -s:" & FTPcmd

    results = myProcess.StandardOutput.ReadToEnd

    Writer2 = New System.IO.StreamWriter("D:\Test\LOG.txt", True, System.Text.Encoding.Default)
    Writer2.WriteLine(results)
    Writer2.Close()

    myProcess.WaitForExit()
    myProcess.Close()
    myProcess.Dispose()

    File.Delete(FTPcmd)


    以下は異常時のコマンドラインの出力ログです。

    User (172.XX.X.XXX:(none)): open 172.XX.X.XXX


    bin
    put C:\TEST.txt
    quit

    正常時のログも記載しておきます。
    ftp> Connected to 172.XX.X.XXX. open 172.XX.X.XXX
    220 DPS FTPD Version 2.0 (PrintService Dir : /PS).
    User (172.XX.X.XXX:(none)):
    331 Password required for ユーザーID.

    230 User ユーザーID logged in.
    ftp> bin
    200 Type set to I.
    ftp> put C:\TEST.txt
    200 PORT command successful.
    150 Opening BINARY mode data connection for 'STOR'.
    226 Transfer completed.
    ftp: 8506 bytes sent in 0.00Seconds 8506000.00Kbytes/sec. ftp> quit
    221 Goodbye.

    異常時のログ内容から、すでに相手側に接続されUser名(login名)を要求しているが実際には
    接続先のコマンドが当てはまってしまっているようなのですが、テストをしているディレクトリ
    に問題があるのでしょうか?
    皆様、申し訳ありませんがご助力をお願いします。
親記事 /過去ログ12より / 関連記事表示
削除チェック/

■3613  Re[1]: FTP転送について
□投稿者/ はつね -(2007/05/17(Thu) 11:45:19)
>
    No3608 (うっちー さん) に返信
    > 現在、WindowsApplicationにてFTP転送を行う処理を作成しているのですが、デバッグを
    > しながらFTP転送を行うと正常に転送できるのですが、Releaseをしたexeで実際にテスト
    > するとFTP転送が出来ません。 OSは、WindowsXP でVBは、VB.NET 2003です。

    FTPはコマンドを投げると応答の文字列が返信されてきるときがあります。
    つまり、コマンドを投げると応答をまってから次のコマンドを投げるような流れが必要です。
    ソースを見ると一方的にコマンドを投げつけているだけですので、デバッグの時は運良く次のコマンドを送ってもFTPサーバが受け取れるタイミングで動作していましたが、exeで行ったときはその限りではなかったという事が考えられます。
記事No.3608 のレス /過去ログ12より / 関連記事表示
削除チェック/

■3624  Re[2]: FTP転送について
□投稿者/ うっちー -(2007/05/17(Thu) 16:42:45)
    私の質問に対する回答ありがとうございます。

    回避する為に、色々と試してみたのですが、

    その1
    バッチファイルを作成して、実行してみる。
    psi.FileName = "D:\Test\FTP.bat" バッチファイルを指定する
    'psi.Arguments = "/c ftp -s:" & FTPcmd はコメント対応
    結果は変わらず、デバッグでは正常・exeではFTP転送が出来ませんでした。

    その2
    バッチファイルを作成して、シェルにてバッチを実行してみる。
    Shell("D:\Test\FTP.bat", AppWinStyle.NormalNoFocus, True)
    結果は、デバッグ・exe共に正常に転送できました。

    > つまり、コマンドを投げると応答をまってから次のコマンドを投げるような流れが必要です。
    しかし、質問させて下さい。「応答をまってから・・・流れ」とはどの様なものなのでしょうか?
    申し訳ありませんが、ご助力をお願いします。
記事No.3608 のレス /過去ログ12より / 関連記事表示
削除チェック/

■3654  Re[3]: FTP転送について
□投稿者/ はつね -(2007/05/18(Fri) 10:06:17)
>
    No3624 (うっちー さん) に返信
    >>つまり、コマンドを投げると応答をまってから次のコマンドを投げるような流れが必要です。
    > しかし、質問させて下さい。「応答をまってから・・・流れ」とはどの様なものなのでしょうか?

    ※「コマンドを投げると応答を待ってから」は「リクエストを投げるとレスポンスを待ってから」とも言います。

    ここが分からないとなると素直に「その2」案でバッチ作ってshell起動が良いですよ。
    そうじゃなかったらRFCをちゃんと読んでから現在の方法を改良して実装とかですかね。
記事No.3608 のレス /過去ログ12より / 関連記事表示
削除チェック/

■3662  Re[4]: FTP転送について
□投稿者/ ぽぴ王子 -(2007/05/18(Fri) 11:25:42)
>
    ちょっと興味を持ったので、思わず TinyFtpDaemon までインストールして調べてみ
    た王子が参上!

    方式としては FTP.exe にコマンドファイルを与えて自動実行させるという、古来から
    使われている方式なわけですが、この場合は「正常なときはこういうコマンドを入力
    せよ」と FTP.exe に与えていて、それを勝手に FTP.exe が処理しているだけなので、
    コマンドを投げた後の応答を待って…などの処理は不要なはずです。たぶん。

    で、何が悪いのか検討してみようとソースを貼り付けて実行してみたわけですが…
    動かねえ。

    > Dim myProcess As Process = Process.Start(psi)

    これ、psi の定義をしたあとの処理だよね?

    > Dim myProcess As Process
    (中略)
    > psi.UseShellExecute = False
    > psi.CreateNoWindow = True
    > psi.Arguments = "/c ftp -s:" & FTPcmd
    > myProcess = Process.Start(psi)

    こうだよね?ね?
    …ちゃんと動くようなサンプルを置いといてくれよ…(ぶっちゃけモード)

    気を取り直して、動くようになったのでテストしてみたわけですが。

    > User (172.XX.X.XXX:(none)): open 172.XX.X.XXX
    >
    >
    > bin
    > put C:\TEST.txt
    > quit

    こちらの環境だと、正常時のログもこんな感じで出ましたよ。
    Release モードで作成した実行ファイルで動かしてもちゃんと転送できたし。

    むしろ、正しくコマンドファイルが作成できて、FTP.exe が正常に起動できているので
    あれば、どちらかというとプログラムの問題というよりも FTP サーバ側のログを見た
    方がいいと思うのだけど、どうじゃろか。
    あとは「FTP転送ができません」のテスト方法の見直しとか。
    本当は転送できているのだけど、チェックが甘くてそれを見逃しているとか、そういう
    のはよく見ます。FTP に限らずだけど。
    まずは FTP サーバのログを見て、サーバ側で転送を受け付けているかを調べてみ
    るのが先決だと思います。問題の切り分けは大事だとじゃんぬ先生も言っていたし
    ね。

    FTP.exe を実行して FTP 転送を行う…というユーザに対して「rfc 見た?」は酷かし
    らとか思ったわけですが(笑)、それもまた真実なり。
    ただ、いきなり言われても「rfc ってなに?おいしいの?」とかいう話になりそうなの
    で、リンクしておきます。

    【RFCとは】IT用語辞典
    http://e-words.jp/w/RFC.html

    【RFCについて】ftp 関係の rfc を日本語訳してくださっている方のサイト
    http://hp.vector.co.jp/authors/VA002682/rfc_frame.htm
記事No.3608 のレス /過去ログ12より / 関連記事表示
削除チェック/

■3626  Re[1]: FTP転送について
□投稿者/ シャノン -(2007/05/17(Thu) 17:05:06)
記事No.3608 のレス /過去ログ12より / 関連記事表示
削除チェック/

■3627  Re[2]: FTP転送について
□投稿者/ 中博俊 -(2007/05/17(Thu) 17:14:06)
>
    とりあえずrfcみた?
    なにみて作ってるの?
記事No.3608 のレス /過去ログ12より / 関連記事表示
削除チェック/

■3640  Re[1]: FTP転送について
□投稿者/ 片桐 -(2007/05/18(Fri) 00:04:22)
>
    すなおにバッチファイル作ってShell関数で行っといてええような気がするですね。
    というか、自分が作ってきたVBアプリでのFTPも、LinuxのアプリでのFTPも、
    だいたい同じやり方でやっぱりFTPコマンドファイル作って流し込んでましたから(汗)
    無責任な回答かもしれませんけど、基本、.NETでもそこは無理やり変えなくても良いような気がします。
    実際に動いているのを確認できているのですし。

    でも、どちらにせよ、中さんのおっしゃるrfcについては目を通しておくことに損はないですですよ。
記事No.3608 のレス /過去ログ12より / 関連記事表示
削除チェック/

■3670  Re[2]: FTP転送について
□投稿者/ うっちー -(2007/05/18(Fri) 14:14:44)
    はつねさん、シャノンさん、 中博俊さん、片桐さん、ぽぴ王子さん、
    貴重なご意見、ありがとうございます。

    当面は、「その2」案のバッチ作ってshell起動で運用してみます。
    皆様から、ご指摘がありました「RFC」を勉強し直してから再度を改良してみます。

    また、解らない事がありましたら、利用させて頂きますのでその時は宜しくお願いします。
    ありがとうございました。
記事No.3608 のレス / END /過去ログ12より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -