0
FTPサーバへの転送プログラム
FTPサーバはTiny FTP Daemonをたてました。
プログラムは
import java.io.*;
import java.net.*;
public class FTP {
private static final int CTRLPORT = 21; // ftpの制御用のポート
private static Socket ctrlSocket; // 制御用ソケット
private static PrintWriter ctrlOutput; // 制御出力用ストリーム
private static BufferedReader ctrlInput; // 制御入力用ストリーム
private static byte[] localHostAddress; // ローカルホストのアドレス
public static void main(String[] args) {
try {
/** 設定してください **/
String host = "IPアドレス";
String loginName = "ユーザ名i";
String password = "パスワード";
String dirName = "/ディレクトリ場所/";
String fileName = "転送したいファイル名t";
// 接続します
ctrlSocket = new Socket(host, CTRLPORT);
localHostAddress = ctrlSocket.getLocalAddress().getAddress();
ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());
ctrlInput = new
BufferedReader(new InputStreamReader(ctrlSocket.getInputStream()));
// ユーザー認証します
ctrlOutput.println("USER " + loginName);
ctrlOutput.flush();
ctrlOutput.println("PASS " + password);
ctrlOutput.flush();
// 指定したディレクトリに移動します
ctrlOutput.println("CWD " + dirName);
ctrlOutput.flush();
// バイナリモードに設定します(アスキーモードの場合は'TYPE A')
ctrlOutput.println("TYPE I");
ctrlOutput.flush();
// アップロードします
FileInputStream fis = new FileInputStream(fileName);
Socket dataSocket = dataConnection("STOR " + fileName);
OutputStream outstr = dataSocket.getOutputStream();
int n;
byte[] buff = new byte[1024];
while ((n = fis.read(buff)) > 0) {
outstr.write(buff,0,n);
}
dataSocket.close();
fis.close();
// 接続を閉じます
ctrlOutput.close();
ctrlInput.close();
ctrlSocket.close();
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* データ送受信用ソケットを取得します
*/
private static Socket dataConnection(String ctrlcmd)
throws IOException,UnknownHostException {
String cmd = "PORT ";
ServerSocket serverDataSocket = new ServerSocket(0,1);
for (int i=0;i<4;i++) {
cmd = cmd + (localHostAddress[i] & 0xff) + ",";
}
cmd = cmd + (((serverDataSocket.getLocalPort())/256) & 0xff)
+ ","
+ (serverDataSocket.getLocalPort() & 0xff);
ctrlOutput.println(cmd);
ctrlOutput.flush();
ctrlOutput.println(ctrlcmd);
ctrlOutput.flush();
Socket dataSocket = serverDataSocket.accept();
serverDataSocket.close();
return dataSocket;
}
}
サーバにはファイルが作られるのですが、中身が転送できません。
空のファイルになってしまいます。
また、ログ表示は
/ユーザ名/USER/OK/ パスワードを要求
/ユーザ名/PASS/OK/ ログインしました
/ユーザ名/CWD/OK/ ディレクトリが**になりました
/ユーザ名/TYPE/OK/ バイナリモードに入ります
/ユーザ名/PORT/OK/ データリンクをクローズしました
/ユーザ名/PORT/OK/ アドレス0.0.0.0 ポート1309に接続しました
/ユーザ名/STOR/OK/ ファイルを受信します
/ユーザ名/STOR/OK/ データリンクをクローズしました
/ユーザ名/STOR/NG/ ユーザーから切断させました
と出ます。
データを転送したいのですが、どうしたらいいのかわかりません。
ささいなことでもいいので、よろしくお願いします。