| 【】Top
 
 【】VB.NET
 【】VB6.0
 
 【】メールマガジンの購読
 【】メールマガジンの解除
 
 
 
 
 
 
 【】会社概要
 
 【】お問い合わせ
 
 
 姉妹サイト「バーチャルコネクション!」はこちらです。
 
 姉妹サイト「七福神のメールでビンゴ!」はこちらです。
 
 
   
 ●24時間365日の安心をあなたにAT-LINK専用サーバ・サービスお勧めのサーバです。
 
 
 | 
 
               
                |  |  |  |   
                |  | 
   
 
   
    | 
  
        http://anetm.com/dev/d.cgi?SC=DTDTL&o=l3l 
        
  
                 
               
                 
                  | FTPでファイルの一覧を取得する(パッシブモード) |   
                  | 
 |   
                  | 【注意書き】 ●VB.NET を使っているものとします。
 ●動作環境は、Windows XX を使用しているとします。
 
 
 .NET でも、FTPでファイルの一覧を取得することが可能です。
 
 この機能を使えば、簡単に、アプリケーション側で
 FTP接続で、データのやりとりを行いたい場合などに活用できます。
 
 
 フォームに次の様なコードを記述します
 
 
 -----------VB.NETコーディングここから-------------------
 
 
 1.フォームに、ラベルコントロール
 、テキストボックスコントロール
 、リストボックスコントロール
 、ボタンコントロール
 を配置します。
 下記は、デフォルトのオブジェクトの名前と配置を示しています。
 
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃Label1          ┃┃TextBox1                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃Label2          ┃┃TextBox2                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃Label3          ┃┃TextBox3                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃Label4          ┃┃TextBox4                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━┓
 ┃Button1         ┃┃Button2         ┃
 ┗━━━━━━━━┛┗━━━━━━━━┛
 ┏━━━━━━━━┓┏━ェ━━━━━━━━━━━━━━┓
 ┃Label5          ┃┃ListBox1                        ┃
 ┗━━━━━━━━┛┃                                ┃
 ┃                                ┃
 ┃                                ┃
 ┃                                ┃
 ┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 ┃TextBox5                                            ┃
 ┃※複数行                                            ┃
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
 
 
 2.テキストボックスコントロール TextBox5は、
 複数行の入力とするため、
 Multiline プロパティを True にします。(複数行)
 ScrollBars プロパティを Vertical にします。
 (スクロールバー)
 
 
 
 3.ボタンコントロールの
 Button1 text プロパティに「接続」と記述します。
 Button2 text プロパティに「切断」と記述します。
 ラベルコントロールの
 Label1 text プロパティに「ホスト名」と記述します。
 Label2 text プロパティに「ポート番号」と記述します。
 Label3 text プロパティに「ユーザー」と記述します。
 Label4 text プロパティに「パスワード」と記述します。
 Label5 text プロパティに「ファイル一覧」と記述します。
 
 ※説明用のためです。必須ではありません。
 
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃ホスト名        ┃┃TextBox1                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃ポート番号      ┃┃TextBox2                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃ユーザー        ┃┃TextBox3                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃パスワード      ┃┃TextBox4                        ┃
 ┗━━━━━━━━┛┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━┓
 ┃      接続      ┃┃      切断      ┃
 ┗━━━━━━━━┛┗━━━━━━━━┛
 ┏━━━━━━━━┓┏━━━━━━━━━━━━━━━━┓
 ┃ファイル一覧    ┃┃ListBox1                        ┃
 ┗━━━━━━━━┛┃                                ┃
 ┃                                ┃
 ┃                                ┃
 ┃                                ┃
 ┗━━━━━━━━━━━━━━━━┛
 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 ┃TextBox5                                            ┃
 ┃※複数行                                            ┃
 ┃                                                    ┃
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
 
 
 4.ボタンコントロールをダブルクリックして、
 ボタンのクリックイベントの編集を開始して、
 フォームの宣言部に、次のコードを記述します。
 
 
 Imports System.Net
 Imports System.Text
 
 
 
 さらに、次のコードを記述します。
 
 
 
 Const C_SENDMODE_TEXT = 10
 Const C_SENDMODE_LIST = 20
 
 Const C_FTPPORT_SOC = 21
 
 Const C_MJSOC_1 = 1
 Const C_MJSOC_2 = 2
 
 
 
 Dim Mjsoc As Sockets.Socket
 Dim Mjip As IPAddress
 Dim Mjipe As IPEndPoint
 
 Dim Mjsocdata As Sockets.Socket
 Dim Mjipdata As IPAddress
 Dim Mjipedata As IPEndPoint
 
 Dim MjipdataIp As String
 Dim MjipdataPort As String
 
 
 Dim MjstrFilePath As String
 
 Private Sub Button1_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
 
 
 Dim strSev As String    'ホスト名
 Dim strSevp As String   'ポート
 
 Dim strUser As String   'ユーザー
 Dim strPass As String   'パスワード
 
 Dim strRetString As String
 
 strSev = TextBox1.Text
 strSevp = TextBox2.Text
 strUser = TextBox3.Text
 strPass = TextBox4.Text
 
 
 mjsoc = New Sockets.Socket( _
 Net.Sockets.AddressFamily.InterNetwork, _
 Net.Sockets.SocketType.Stream, _
 Net.Sockets.ProtocolType.Tcp)
 
 Try
 Mjip = Dns.Resolve(strSev).AddressList(0)
 Mjipe = New IPEndPoint(Mjip, strSevp)
 
 Mjsoc.Connect(Mjipe)
 strRetString = SED_DATA(Mjsoc, "", _
 C_SENDMODE_TEXT, C_MJSOC_1)
 TextBox5.AppendText(strRetString & vbCrLf)
 Application.DoEvents()
 
 strRetString = SED_DATA(Mjsoc, "USER " & strUser, _
 C_SENDMODE_TEXT, C_MJSOC_1)
 TextBox5.AppendText(strRetString & vbCrLf)
 
 strRetString = SED_DATA(Mjsoc, "PASS " & strPass, _
 C_SENDMODE_TEXT, C_MJSOC_1)
 TextBox5.AppendText(strRetString & vbCrLf)
 
 'アスキーモード
 strRetString = SED_DATA(Mjsoc, "TYPE A", _
 C_SENDMODE_TEXT, C_MJSOC_1)
 TextBox5.AppendText(strRetString & vbCrLf)
 
 'パッシブモード
 strRetString = SED_DATA(Mjsoc, "PASV", _
 C_SENDMODE_TEXT, C_MJSOC_1)
 TextBox5.AppendText(strRetString & vbCrLf)
 Call FtpPasvGet(strRetString)
 
 Mjsocdata = New Sockets.Socket( _
 Net.Sockets.AddressFamily.InterNetwork, _
 Net.Sockets.SocketType.Stream, _
 Net.Sockets.ProtocolType.Tcp)
 
 Mjipdata = Dns.Resolve(MjipdataIp).AddressList(0)
 Mjipedata = New IPEndPoint(Mjipdata, MjipdataPort)
 
 Mjsocdata.Connect(Mjipedata)
 
 'リストを取得する
 strRetString = SED_DATA(Mjsoc, "NLST -all", _
 C_SENDMODE_TEXT , C_MJSOC_1)
 TextBox5.AppendText(strRetString & vbCrLf)
 
 
 strRetString = SED_DATA(Mjsocdata, "", C_SENDMODE_LIST _
 , C_MJSOC_2)
 
 Mjsocdata.Shutdown(Sockets.SocketShutdown.Both)
 Mjsocdata.Close()
 
 Call SED_DATA(Mjsoc, "QUIT " _
 , C_SENDMODE_TEXT, C_MJSOC_1)
 
 Mjsoc.Shutdown(Sockets.SocketShutdown.Both)
 Mjsoc.Close()
 
 Catch ex As Exception
 TextBox5.AppendText(ex.Message)
 End Try
 
 
 End Sub
 
 Function SED_DATA(ByVal Soc As Sockets.Socket, _
 ByVal strData As String, ByVal intMode As Integer, _
 ByVal intSoc As Integer) As String
 
 SED_DATA = ""
 
 Dim strD As String
 Dim strDB() As String
 
 Dim intRet As Integer
 Dim bytRetBuf(1024) As Byte
 Dim bytWBuf() As Byte
 
 Dim strString As String
 Dim strIP As String
 
 
 Dim strDW As String
 
 
 Dim strWStr() As String
 
 
 If strData <> "" Then
 bytWBuf = Encoding.ASCII.GetBytes( _
 strData & vbCrLf)
 Soc.Send(bytWBuf)
 End If
 
 
 Do
 Do
 
 bytRetBuf.Initialize()
 intRet = Soc.Receive(bytRetBuf)
 
 strDW = Encoding.ASCII.GetString( _
 bytRetBuf, 0, intRet)
 strD &= strDW
 If Soc.Available = 0 Then
 If intSoc = C_MJSOC_2 _
 And intMode = C_SENDMODE_LIST Then
 If Soc.Poll(100, _
 Sockets.SelectMode.SelectRead) _
 Then
 Exit Do
 End If
 Else
 Exit Do
 End If
 
 End If
 
 
 Loop
 
 If intSoc = C_MJSOC_1 Then
 strWStr = Split(strD, vbCrLf)
 If UBound(strWStr) = 0 Then
 Exit Do
 End If
 If Trim(strWStr(UBound(strWStr) - 1).Substring( _
 3, 1)) = "" Then
 Exit Do
 End If
 Else
 Exit Do
 End If
 
 Loop
 SED_DATA = strD
 
 If intSoc = C_MJSOC_2 Then
 strWStr = Split(strD, vbCrLf)
 ListBox1.Items.AddRange(strWStr)
 End If
 
 
 If Nothing = SED_DATA Then
 SED_DATA = ""
 End If
 
 End Function
 
 
 
 
 
 
 Private Sub Form1_Load(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles MyBase.Load
 TextBox1.Text = ""
 TextBox2.Text = C_FTPPORT_SOC
 TextBox3.Text = ""
 TextBox4.Text = ""
 TextBox4.PasswordChar = "*"
 TextBox5.Text = ""
 
 ListBox1.Items.Clear()
 
 
 
 End Sub
 
 
 
 
 Private Sub Button2_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button2.Click
 
 Try
 Call SED_DATA(Mjsoc, "QUIT " _
 , C_SENDMODE_TEXT, C_MJSOC_1)
 
 Mjsoc.Shutdown(Sockets.SocketShutdown.Both)
 Mjsoc.Close()
 
 Catch ex As Exception
 TextBox5.AppendText(ex.Message)
 
 End Try
 
 End Sub
 
 Sub FtpPasvGet(ByVal GetMessage As String)
 'PASVにてFTPサーバへの接続ポートを取得
 
 Dim wk1 As String
 Dim wk2 As String
 
 Dim wk3 As String
 Dim pos1 As Integer
 Dim pos2 As Integer
 
 pos2 = InStr(1, GetMessage, ")", 1)
 pos1 = pos2
 
 Do
 pos1 = pos1 - 1
 If Mid(GetMessage, pos1, 1) = "," Then
 wk2 = Mid(GetMessage, pos1 + 1, _
 pos2 - pos1 - 1)
 Exit Do
 End If
 Loop
 pos2 = pos1
 Do
 pos1 = pos1 - 1
 If Mid(GetMessage, pos1, 1) = "," Then
 wk1 = Mid(GetMessage, pos1 + 1, _
 pos2 - pos1 - 1)
 Exit Do
 End If
 Loop
 
 
 Dim i As Integer
 Dim istr As Integer
 
 pos2 = InStr(1, GetMessage, "(", 1)
 pos1 = pos2
 Do
 istr = istr + 1
 pos1 = pos1 + 1
 If Mid(GetMessage, pos1, 1) = "," Then
 i = i + 1
 If i >= 4 Then Exit Do
 End If
 
 Loop
 wk3 = Mid(GetMessage, pos2 + 1, istr - 1)
 wk3 = wk3.Replace(",", ".")
 
 MjipdataIp = wk3
 
 MjipdataPort = _
 CLng(wk1) * 256 + CLng(wk2)
 'FTPサーバから取得したポート番号で接続します。
 
 End Sub
 
 
 5.ビルドして実行します。
 
 6.ホスト名に、FTPサーバー名を入力します。
 例) localhost.com
 
 7.ポート番号に、ポート番号を入力します。
 例)21
 
 8.ユーザーに、FTPログオンユーザー名を入力します。
 例)loginuser
 
 9.パスワードに、FTPログオンパスワードを入力します。
 例)loginpass
 
 10.フォームに表示された「接続」ボタンを押します。
 
 11.FTPサーバーへの接続動作が行われたことを確認できます。
 
 12.さらに、サーバーよりファイルと一覧を
 表示出来る事を確認できます。
 
 -----------VB.NETコーディングここまで-------------------
 
 本サンプルでは、ファイルのアップロード、ダウンロードの機能は
 実装していません。
 
 パスワードの入力は、"*"で伏せるようにしております。
 
 本サンプルの 例) の入力値は、あくまで例題であり、
 接続が行えるものではありませんでの、
 接続が可能な サーバー に書き換えてご使用ください。
 
 
 本サンプルでは、
 パッシブモードでダウンロードするようにしています。
 
 
 
 |  
  
             
   
 Copyright(c)2001-2004 Ai Net Makoto 記事・情報の無断転載を禁止します。  |  |  |   
                |  |  |  |  |