FtpWebRequestでポート番号を指定する方法
.NETでFTPを利用する場合、FtpWebRequestを利用するのが一般的かと思います。FtpWebRequestクラスにはポート番号を指定して通信を行う方法をメモ代わりにまとめます。
FtpWebRequestクラスでは直接ポート番号をプロパティのような形で設定はできないようなので、URIに対して設定してやる形になります。
例えばFTPサーバーでのカレントディレクトリを表示するFTPコマンドを、ポート番号指定で実行するには以下のようにします。
C#
var server = "localhost";
var port = 21;
// ftp://[ホスト名]:[ポート番号] となるようにURLを指定する
var ftpRequest = WebRequest.Create($"ftp://{server}:{port}/") as FtpWebRequest;
ftpRequest.Credentials = new NetworkCredential("user", "password");
ftpRequest.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;
var ftpResponse = ftpRequest.GetResponse() as FtpWebResponse;
Console.WriteLine(ftpResponse.StatusDescription);
ftpResponse.Close();
VB.NET
Dim port As Integer = 21
Dim server As String = "localhost"
' ftp://[ホスト名]:[ポート番号] となるようにURLを指定する
Dim ftpRequest As FtpWebRequest = WebRequest.Create(String.Format("ftp://{0}:{1}/", server, port))
ftpRequest.Credentials = New NetworkCredential("user", "passoword")
ftpRequest.Method = WebRequestMethods.Ftp.PrintWorkingDirectory
Dim ftpResponse As FtpWebResponse = ftpRequest.GetResponse()
Console.WriteLine(ftpResponse.StatusDescription)
ftpResponse.Close()
URIでのポート指定
//<user>:<password>@<host>:<port>/<url-path>
httpやftpのような特定のホストにIP接続する類のスキームでは上のような共通の形式のURIが用いられます。ここではユーザーとパスワードとポートは省略できます。ユーザーとパスワードは別途指定するのでよいとして、ポートをhost(サーバー名)の後に付けてポートを指定します。
なおポートを省略すると、そのプロトコルの既定のポートが使用されます。ftpだと21、httpだと80が利用されることになります。
ユーザー名とパスワード
上のサンプルでは、FtpWebRequest.Credentialsにユーザー名とパスワード情報を指定していますが、上の通りURI上でも指定できるようです。試したら動きました。違いは判りませんが。
以上です。
コメントを書く