[C#][VB.NET] FtpWebRequestでポート番号を指定する方法

[C#][VB.NET] FtpWebRequestでポート番号を指定する方法

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上でも指定できるようです。試したら動きました。違いは判りませんが。

以上です。

C#カテゴリの最新記事