| |
|
|
|
| |
 |
FTP編 |
 |
◆FTPとは? |
| FTPとはFile Transfer
Protocolの略です。TCP/IPネットワークでファイルを転送するときに使用されるプロトコルです。 |
| ◆ここでの環境 |
| OS |
Windows 2000 |
| J2SE SDK |
1.4.0 |
|
|
|
| ◆Java実行環境の構築 |
| アプリケーション編を参考にしてJava実行環境を構築してください。 |
| ◆Javaソースコード |
| ここでは、FTPサーバーにファイルを転送する簡単なアプリケーションを作成したいと思います。 |
| HelloWorldFTP.java(ここからダウンロード) |
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;
}
} |
|
|
|
(注意)
「ホスト名」、「ユーザー名」、「パスワード」、「アップロードするディレクトリ」、「アップロードするファイル」は環境に合わせて設定してください。 |
| ◆転送するファイルの用意 |
| 転送するファイルをJavaのプログラムがあるディレクトリに置きます。ここでは「hello.zip」を置きました。 |
| ◆コンパイルと実行 |
| コマンドプロンプト |
| C:\作業フォルダ\JavaHello>javac
HelloWorldFTP.java C:\作業フォルダ\JavaHello>java
HelloWorldFTP
C:\作業フォルダ\JavaHello> |
|
| どうやらうまく動いたみたいです。さっそくサーバーにファイルが転送されているか見てみましょう。 |
| Telnet |
# cd /home/testuser
# ls
hello.zip
# |
|
| おおおお!!ファイルが転送されていますね! |
| |
■書籍
Java関連の書籍 |
|
| |
|
| |
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |
|
|