- - PR -
FTP転送
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などのソフトを使い接続してみると うまく転送されてますのでうまくいくはずなのですが だれかわかるかたいましたら教えてください。 | ||||||||
|
投稿日時: 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/ | ||||||||
|
投稿日時: 2004-04-13 10:06
単純に、「passiveモードでないとFTPできない」構成になっている(NATとか)
とかいうことはありませんか? | ||||||||
|
投稿日時: 2004-04-13 12:26
まさです。
下記は自分が FTP クライアントを作った時の流れです。 # 正しいかわかりませんが、一応動いています。
データコネクションは下記のように作っていました。 アクティブモード : ServerSocket パッシブモード : Socket
転送するためのストリームを取得するために、 (3) で作ったソケットから OutputStream をとりました。 アクティブモード : ServerSocket.accept().getOutputStream() パッシブモード : Socket.getOutputStream() このストリームに書き込むと転送できます。 PORT コマンドということは、 アクティブモードですよね。 データコネクションを作成する時 {(3)の時} に ServerSocket でコネクションをはってみてください。 → new ServerSocket(0); | ||||||||
1
