- - PR -
FTPのPORTで使うポート番号を取得する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-10-31 00:30
こんにちは。ぷーちんです。
VB.NETでTcpClientとTcpListenerを使って、FTPのdirをアクティブモードで行う メソッドを作っています。 コマンドプロンプトで FTP -d ホスト で処理を追うと以下のようになっていました。 ftp> dir ---> PORT xxx,xxx,xxx,xxx,8,234 (xxx,xxx,xxx,xxxはIPアドレス) 200 PORT command successful. ---> LIST 150 Opening ASCII mode data connection for /bin/ls. LISTの結果 226 Transfer complete. dirを繰り返し行うと、PORTコマンドの最後の数字(上記だと234)がカウントアップ されています。(255までで その前の数字も変わる) 調べたら、8 * 256 + 234 = 2282 がこのときのポート番号という事でした。 FTPのポート番号は、他の資料では 20 となっていたので、プログラムでは、 試しに以下のようにしました。 PORT xxx,xxx,xxx,xxx,0,20 しかし、1回目だけしか結果が取れず、それ以降しばらく応答がありません。 (数分後には結果が取れました) PORT xxx,xxx,xxx,xxx,8,240 のように適当な数字を毎回変えて指定すると繰り返し行えますが、 実際はどうすればよいのかわかりません。 そこで2つ教えて頂きたいと思います。 1.ポート番号は、1度使うとしばらく使えないのでしょうか? 2.コマンドプロンプトで動かすのと同じように、実行時点の空きポート番号を 取得することはできないでしょうか? どうぞよろしくお願い致します。 |
|
投稿日時: 2002-10-31 09:08
(;´Д`)ノ
http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/netpro01.html |
|
投稿日時: 2002-10-31 10:50
ぷーちんです。
okayさん、お返事ありがとうございます。 早速、FTPの詳説を読みました。 最近買った本より詳しい内容で勉強になりました。 クライアント側の空きポート番号取得方法もご存知でしたら教えてください。 現在、TcpClient でサーバにPORTで適当な番号(コマンドプロンプトで 直前にdirを実行した際に表示されたポート番号+1した番号)を指定して、 TcpListenerでそのポート番号でデータを待つという作りにしています。 データが終われば、TcpListenerのStopメソッドでリスナを閉じているので、 次のデータ送受信でも、再度同じポート番号が使えるのかと考えていたのですが、 やはり毎回ポート番号を変えてやらなければ駄目なんでしょうか...。 変える為には、ポート番号の取得する必要があるので困っています。 よろしくお願い致します。 |
|
投稿日時: 2002-10-31 13:26
(;´Д`)ノ
TcpListenerのコンストラクタのドキュメントを読んでみてくらさい。 例えば・・・ TcpListener listener = new TcpListener(0); listener.Start(); Console.WriteLine(listener.LocalEndpoint); |
|
投稿日時: 2002-10-31 14:32
ぷーちんです。
TcpListenerのコンストラクタのドキュメント読んでみました。 すみません、しっかり「番号が 0 の場合、システムはオープン ポートを割り当てます。」 と、書いてありました。 教えていただいたとおり、以下の方法でポート番号が取得できました。 Dim tcpListener As TcpListener tcpListener = New TcpListener(0) tcpListener.Start() Dim ipeLocalPort As IPEndPoint = CType(tcpListener.LocalEndpoint, IPEndPoint) okayさん、どうもありがとうございました。 |
1