- PR -

FTP転送

1
投稿者投稿内容
kira
会議室デビュー日: 2004/04/12
投稿数: 1
投稿日時: 2004-04-12 19:35
下のような手順でFTP転送プログラムを作成しました。

(1)制御用コネクションの確立
 ・Socketクラスを使用(ホスト名:TEST ポート:21)
(2)PORTコマンドの送信
 ・クライアント側のデータ転送ポートの通知
(3)データ転送用コネクションの確立
 ・Socketクラスを使用(PORTコマンドで通知したポートを使用)
(4)STORコマンドを送信
(5)ファイルを転送
 ・ServerSocketクラスのacceptメソッドを使用
(6)制御用コネクション切断
(7)データ転送用コネクション切断

ローカルどおしですと、うまくファイル転送しているのですが
ローカルから外のサーバへ転送しようとすると
(5)ファイルを転送
 ・ServerSocketクラスのacceptメソッドを使用
で応答がありません。
外のサーバへFFFTPなどのソフトを使い接続してみると
うまく転送されてますのでうまくいくはずなのですが
だれかわかるかたいましたら教えてください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-04-12 19:57
パケットキャプチャをして何が起きているか調べてみてはいかがでしょうか。
・Packetyzer(Windowsで便利)
http://www.packetyzer.com/
・Ethereal(大抵のOSで動く)
http://www.ethereal.com/

あと、 FTP用のライブラリってのも既存のがいくつかあります。Antのタスクとか、commons-Net とか。
http://jakarta.apache.org/commons/net/
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2004-04-13 10:06
単純に、「passiveモードでないとFTPできない」構成になっている(NATとか)
とかいうことはありませんか?
まさ
ベテラン
会議室デビュー日: 2002/11/15
投稿数: 74
投稿日時: 2004-04-13 12:26
まさです。

下記は自分が FTP クライアントを作った時の流れです。
# 正しいかわかりませんが、一応動いています。

引用:

(3)データ転送用コネクションの確立
 ・Socketクラスを使用(PORTコマンドで通知したポートを使用)



データコネクションは下記のように作っていました。
アクティブモード : ServerSocket
パッシブモード : Socket

引用:

(5)ファイルを転送
 ・ServerSocketクラスのacceptメソッドを使用



転送するためのストリームを取得するために、
(3) で作ったソケットから OutputStream をとりました。
アクティブモード : ServerSocket.accept().getOutputStream()
パッシブモード : Socket.getOutputStream()

このストリームに書き込むと転送できます。

PORT コマンドということは、
アクティブモードですよね。
データコネクションを作成する時 {(3)の時} に
ServerSocket でコネクションをはってみてください。

→ new ServerSocket(0);
1

スキルアップ/キャリアアップ(JOB@IT)