import java.io.*; import java.net.*; public class HelloWorldFTP { 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 = "192.168.1.1"; String loginName = "testuser"; String password = "password"; String dirName = "/home/testuser"; String fileName = "hello.zip"; // 接続します 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; } }