VB.NETでFTPクライアントを作成していますが、パッシブモードでは機能実現ができません。

アクティブモード(PORTモード)のソースがありましたら教えていただけませんか?
<参考URL>
http://support.microsoft.com/kb/832679/ja

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/10/19 18:48:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:lains_you No.1

回答回数50ベストアンサー獲得回数10

ポイント35pt

 以下はTcpClientを使用したC#のソースです。VBに変換して試してみてください。


        //Portコマンドパラメータ作成
        // ip   - IPアドレス
        // port - port番号
        private string PortParam(IPAddress ip, int port)
        {
            string addr = ip.ToString().Replace('.', ',');

            int p1 = port / 256;
            int p2 = port % 256;

            return addr + "," + p1.ToString() + "," + p2.ToString();
        }

        //アクティブモード接続
        //  cmd - コマンド
        private TcpClient getActvConnection(string cmd)
        {
            IPHostEntry localhost = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipaddress = localhost.AddressList[0];
            TcpListener listener = new TcpListener(ipaddress, 50001);
            TcpClient client;

            ExecCmd("PORT " + this.PortParam(ipaddress, 50001) + "\r\n");
            listener.Start();
            ExecCmd(cmd);
            client = listener.AcceptTcpClient();
            listener.Stop();

            return client;
        }

備考

  • Socketではなく、TcpClientを使用しています。
  • ExecCmd内では、TcpClient.GetStreamを用いてデータの送受信を行っています。
id:sageteen

ありがとうございます

2006/10/19 18:47:37

その他の回答1件)

id:lains_you No.1

回答回数50ベストアンサー獲得回数10ここでベストアンサー

ポイント35pt

 以下はTcpClientを使用したC#のソースです。VBに変換して試してみてください。


        //Portコマンドパラメータ作成
        // ip   - IPアドレス
        // port - port番号
        private string PortParam(IPAddress ip, int port)
        {
            string addr = ip.ToString().Replace('.', ',');

            int p1 = port / 256;
            int p2 = port % 256;

            return addr + "," + p1.ToString() + "," + p2.ToString();
        }

        //アクティブモード接続
        //  cmd - コマンド
        private TcpClient getActvConnection(string cmd)
        {
            IPHostEntry localhost = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipaddress = localhost.AddressList[0];
            TcpListener listener = new TcpListener(ipaddress, 50001);
            TcpClient client;

            ExecCmd("PORT " + this.PortParam(ipaddress, 50001) + "\r\n");
            listener.Start();
            ExecCmd(cmd);
            client = listener.AcceptTcpClient();
            listener.Stop();

            return client;
        }

備考

  • Socketではなく、TcpClientを使用しています。
  • ExecCmd内では、TcpClient.GetStreamを用いてデータの送受信を行っています。
id:sageteen

ありがとうございます

2006/10/19 18:47:37
id:ohmix1 No.2

回答回数235ベストアンサー獲得回数14

ポイント35pt

.NET Framework 2.0 からFtpWebRequestクラスが使えると思います。ソケットで書く必要無いのでは?

http://www.devasp.net/net/articles/display/246.html

http://support.microsoft.com/kb/832679/ja


FtpWebRequestのUsePassiveでパッシブとアクティブを切り替えます。

http://msdn2.microsoft.com/ja-jp/library/system.net.ftpwebreques...

id:sageteen

ありがとうございます

2006/10/19 18:47:46

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません