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

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

C# と VB.NET の入門サイト

Re[2]: vb netのftp接続について


(過去ログ 138 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■81339 / inTopicNo.1)  vb netのftp接続について
  
□投稿者/ かずま (1回)-(2016/09/08(Thu) 18:55:11)

分類:[VB.NET/VB2005 以降] 

VB.netを用いて、ftp接続でファイル一覧を取得しようとしているのですがエラーがでまして、
パスの指定がおかしいのでしょうか?
フルパスは.LIB01/LIB/.DATA01/でして、.DATA01/のファイルを取得したいのですが。
コマンドプロンプトでは入れるのに、vb.netだと入れません。

.netframework4.0
vs express 2013を使っています。

追加情報:リモート サーバーがエラーを返しました: (501) パラメーターまたは引数に構文エラーがあります
 
     'ファイル一覧を取得するディレクトリのURI '
Dim u As New Uri("ftp://namae:pass@192.168.1.1/.DATA01/")

'FtpWebRequestの作成
Dim ftpReq As System.Net.FtpWebRequest = _
CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest)
'ログインユーザー名とパスワードを設定
ftpReq.Credentials = New System.Net.NetworkCredential("system2", "system2")
'MethodにWebRequestMethods.Ftp.ListDirectoryDetails("LIST")を設定
ftpReq.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails
'要求の完了後に接続を閉じる
ftpReq.KeepAlive = False
'PASSIVEモードを無効にする
ftpReq.UsePassive = False

'FtpWebResponseを取得
Dim ftpRes As System.Net.FtpWebResponse = _
CType(ftpReq.GetResponse(), System.Net.FtpWebResponse)
'FTPサーバーから送信されたデータを取得
Dim sr As New System.IO.StreamReader(ftpRes.GetResponseStream())
Dim res As String = sr.ReadToEnd()
'ファイル一覧を表示
Console.WriteLine(res)
sr.Close()

'FTPサーバーから送信されたステータスを表示
Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
'閉じる
ftpRes.Close()

引用返信 編集キー/
■81340 / inTopicNo.2)  Re[1]: vb netのftp接続について
□投稿者/ 魔界の仮面弁士 (893回)-(2016/09/08(Thu) 20:33:53)
No81339 (かずま さん) に返信
> VB.netを用いて、ftp接続でファイル一覧を取得しようとしているのですが
対象となる FTP サーバーは何を利用していますか?


> エラーがでまして、
FTP サーバー側の通信ログには、どのように記録されていましたか?
それをコマンドプロンプトからのリクエストと比較してみれば、
問題箇所が分かるかもしれません。

たとえば FtpWebRequest の場合、"OPTS utf8 on" コマンドを送出しますが、
これは FTP コマンドでは送出されないなどの違いがあります。



サーバー側のログを取得できない場合は、クライアント側で
ロギングしてみてください。
FTP コマンドの場合は「-d」オプションで通信内容を記録できます。
FtpWebRequest の場合は、App.config に下記を追加すれば OK です。

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Information"/>
    </switches>
    <sharedListeners>
      <add name="System.Net" initializeData="true"
           type="System.Diagnostics.ConsoleTraceListener" />
    </sharedListeners>
    <trace autoflush="true"/>
  </system.diagnostics>
</configuration>



> 'ファイル一覧を取得するディレクトリのURI '
> Dim u As New Uri("ftp://namae:pass@192.168.1.1/.DATA01/")
> 'ログインユーザー名とパスワードを設定
> ftpReq.Credentials = New System.Net.NetworkCredential("system2", "system2")

パスワードとして、「namae/pass」と「system2/system2」という
2 つの組み合わせが指定されていますが、どちらが本当の情報でしょうか。

それとも、それぞれ異なる目的で設定されているパスワードでしょうか?


Imports System.IO
Imports System.Net
Module Module1
    Sub Main()
        Dim u As New Uri("ftp://ftp.microsoft.com/developr/vb/")

        Dim ftpReq = DirectCast(WebRequest.Create(u), FtpWebRequest)
        ftpReq.Credentials = New NetworkCredential("anonymous", "user@example.com")
        ftpReq.Method = WebRequestMethods.Ftp.ListDirectoryDetails
        ftpReq.KeepAlive = False
        ftpReq.UsePassive = False

        Dim ftpRes = DirectCast(ftpReq.GetResponse(), FtpWebResponse)
        Dim sr As New StreamReader(ftpRes.GetResponseStream())
        Dim res As String = sr.ReadToEnd()
        Console.WriteLine(res)
        sr.Close()

        Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription)
        ftpRes.Close()
    End Sub
End Module



> 追加情報:リモート サーバーがエラーを返しました: (501) パラメーターまたは引数に構文エラーがあります

501 は、クライアントから要求された FTP コマンドの引数に
問題があることを示します。

サポートされていないコマンドであれば、500 や 502 になるはず。


> フルパスは.LIB01/LIB/.DATA01/でして、.DATA01/のファイルを取得したいのですが。
> コマンドプロンプトでは入れるのに、vb.netだと入れません。
コマンドプロンプトの FTP で、ログイン直後に「pwd」コマンドを
送出してみてください。サーバーによっては、ログインユーザー別に
用意されたサブフォルダが、初期パスになっていることがあります。

引用返信 編集キー/
■81342 / inTopicNo.3)  Re[2]: vb netのftp接続について
□投稿者/ かずま (2回)-(2016/09/09(Fri) 10:48:30)
2016/09/09(Fri) 10:49:13 編集(投稿者)
2016/09/09(Fri) 10:49:10 編集(投稿者)

ご指摘いただいた、AppConfigにログ表示を追加しましたら、解決しました。

System.Net Information: 0 : [3820] FtpControlStream#10340569 - コマンド [CWD .DATA01] を送信しています
System.Net Information: 0 : [3820] FtpControlStream#10340569 - 受信された応答 [501 Bad arguments.]

となっていたので、下記に変更したら正常に動作しました。
Dim u As New Uri("ftp://system2:system2@192.168.1.1/.DATA01%2f/")

System.Net Information: 0 : [3820] FtpControlStream#60504916 - コマンド [CWD .DATA01/] を送信しています
System.Net Information: 0 : [3820] FtpControlStream#60504916 - 受信された応答 [250 CWD command is successful.]

的確な情報をいただき、とても助かりました。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -