質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

0回答

2034閲覧

socket通信でftpサーバーにファイルをputしたい

0sksksk

総合スコア17

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2020/08/24 02:34

ファイルgetはできるのにputができないです

添付のプログラムでファイルのputとgetをしたいと考えており、
getはできるようになったのですが、インターネットで調べてもgetのみでputのやり方が書いてあるページが見当たらず、これ以上自分の力では進まないと感じたため質問させていただきました。
よろしくお願いします。

java

1class jftp { 2 3 public static void main(String args[]) { 4 5 if (args.length < 4) { 6 Usage(); 7 } 8 new Client(args[0], args[1], args[2], args[3]); 9 } 10 11 public static void Usage() { 12 13 System.err.println("Usage:java jftp URL UserName Password type"); 14 System.err.println("ftp://10.18.119.61/"); 15 System.err.println("URL:(ex)http://www.yahoo.co.jp/index.html"); 16 System.err.println("type:Ascii or Binary"); 17 System.exit(-1); 18 } 19}

java

1import java.io.BufferedReader; 2import java.io.DataInputStream; 3import java.io.DataOutputStream; 4import java.io.FileOutputStream; 5import java.io.IOException; 6import java.io.InputStreamReader; 7import java.net.InetAddress; 8import java.net.ServerSocket; 9import java.net.Socket; 10import java.net.URL; 11import java.util.StringTokenizer; 12 13class Client 14{ 15 // 受信コード 16 public static final String READY = "220"; 17 public static final String USER = "331"; 18 public static final String PASS = "230"; 19 public static final String COMMAND = "200"; 20 public static final String OPEN = "150"; 21 public static final String TRANSFER = "226"; 22 23 // 定数 24 public static final char return_code = 0x0a; 25 public static final int client_port = 1094; 26 27 // メッセージ送受信用I/Oストリーム 28 BufferedReader input; 29 DataOutputStream output; 30 31 // Publicメンバ変数 32 URL url; 33 String user_name; 34 String password; 35 String type; 36 String file_name; 37 int ip[]; 38 39 // コンストラクタ 40 public Client(String param_url,String user_name,String password,String type) 41 { 42 this.user_name = user_name; 43 this.password = password; 44 this.type = type; 45 46 connection(param_url); 47 } 48 49 // FTPコネクション 50 public void connection(String param_url) 51 { 52 try 53 { 54 url = new URL(param_url); 55 56 // IPアドレスの取得 57 int index = 0; 58 ip = new int[4]; 59 StringTokenizer string; 60 61 Socket socket = new Socket(url.getHost(),8021); 62 InetAddress ipaddress = InetAddress.getLocalHost(); 63 string = new StringTokenizer(ipaddress.getHostAddress(),"."); 64 while(string.hasMoreTokens()) 65 { 66 ip[index] = Integer.parseInt(string.nextToken()); 67 index++; 68 } 69 70 // ファイル名の解析 71 72 string = new StringTokenizer(url.getFile(),"/"); 73 74 System.out.println(url.getFile()); 75 System.out.println("クリア"); 76 String file_name = new String(); 77 while(string.hasMoreTokens()) 78 { 79 file_name = string.nextToken(); 80 System.out.println("ループに入っています"); 81 System.out.println("file_name = " +file_name); 82 System.out.println(url.getFile()); 83 } 84 85 System.out.println("file_name = " +file_name); 86 // 送受信用リスナ 87 ServerSocket ssocket = new ServerSocket(client_port); 88 89 // メッセージ送受信用I/Oストリームの取得 90 input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 91 output = new DataOutputStream(socket.getOutputStream()); 92 93 // FTP 通信の開始。 94 ReceiveMessage(READY); 95 System.out.println("FTP通信開始"); 96 97 UserAuthentication(user_name,password); 98 SetType(type); 99 OpenClientPort(ip,client_port); 100 int file_size = ReceiveFile(url.getFile().substring(1));//受信を行う箇所 101 System.out.println("ftp通信完了"); 102 103 // 受信用リスナの構築 104 Socket receive = ssocket.accept(); 105 DataInputStream data_in = new DataInputStream(receive.getInputStream()); 106 DataOutputStream file_out = new DataOutputStream(new FileOutputStream(file_name)); 107 System.out.println("受信リスナ構築完了"); 108 109 // 受信&書き出し 110 String str; 111 112 for(int i=0;i<file_size;i++) 113 { 114 System.out.println("for文に入っています"); 115 file_out.writeByte(data_in.readByte()); 116 } 117 118 ReceiveMessage(TRANSFER); 119 System.out.println("Receive OK"); 120 121 // 終了処理 122 socket.close(); 123 ssocket.close(); 124 } 125 catch(Exception e) 126 { 127 System.err.println(e.toString()); 128 } 129 } 130 131 // リターンコードの確認 132 protected boolean isReady(String string,String type) 133 { 134 if(string.substring(0,3).compareTo(type) == 0) 135 { 136 return(true); 137 } 138 return(false); 139 } 140 141 // エラーメッセージルーチン 142 protected void ErrorMessage(String message) 143 { 144 System.out.println(message); 145 System.exit(-1); 146 } 147 148 // メッセージの送信 149 protected void SendMessage(String message) 150 { 151 try 152 { 153 output.writeBytes(message + return_code); 154 } 155 catch(IOException e) 156 { 157 System.err.println(e.toString()); 158 } 159 } 160 161 // 受信メッセージの判断 162 protected String ReceiveMessage(String type) 163 { 164 try 165 { 166 String res = input.readLine(); 167 System.out.println(">" + res); 168 if(!isReady(res,type)) 169 { 170 ErrorMessage("Error: code = " + type); 171 } 172 return(res); 173 } 174 catch(IOException e) 175 { 176 System.out.println(e.toString()); 177 return("Error_Code"); 178 } 179 } 180 181 // ユーザー認証 182 protected void UserAuthentication(String user_name,String password) 183 { 184 SendMessage("USER " + user_name); 185 ReceiveMessage(USER); 186 187 SendMessage("PASS " + password); 188 ReceiveMessage(PASS); 189 } 190 191 // Ascii or Binaryモードセット 192 protected void SetType(String type) 193 { 194 if(type.toLowerCase().compareTo("ascii") == 0) 195 { 196 SendMessage("TYPE A"); 197 ReceiveMessage(COMMAND); 198 } 199 else 200 { 201 SendMessage("TYPE I"); 202 ReceiveMessage(COMMAND); 203 } 204 } 205 206 // データ受信用ポートの通知 207 protected void OpenClientPort(int ip[],int port) 208 { 209 int high_port_number,low_port_number; 210 211 high_port_number = port / 256; 212 low_port_number = port % 256; 213 SendMessage("PORT " + ip[0] + "," + ip[1] + "," + ip[2] + "," + ip[3] + "," 214 + high_port_number + "," + low_port_number); 215 ReceiveMessage(COMMAND); 216 } 217 218 // ファイル受信コマンド 219 protected int ReceiveFile(String file_name) 220 { 221 String receive; 222 System.out.println("受信コマンドに入っています"); 223 System.out.println(file_name); 224 225 SendMessage("RETR " + file_name); 226 receive = ReceiveMessage(OPEN); 227 return(GetFileSize(receive)); 228 } 229 230 // ファイル送信コマンド 231 protected int StoreFile(String file_name) 232 { 233 String receive; 234 System.out.println("送信コマンドに入っています"); 235 System.out.println(file_name); 236 237 SendMessage("STOR " + file_name); 238 receive = ReceiveMessage(OPEN); 239 return(GetFileSize(receive)); 240 } 241 242 // 受信/送信メッセージからファイルサイズを求める 243 protected int GetFileSize(String message) 244 { 245 int size,begin_index,end_index; 246 247 begin_index = message.lastIndexOf('(') + 1; 248 end_index = message.lastIndexOf("bytes") - 1; 249 size = Integer.parseInt(message.substring(begin_index,end_index)); 250 251 return(size); 252 } 253}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/25 09:01

環境の記載、確認方法の記載、エラーメッセージの記載、前回質問時のコメントに対する反応、全て出来ていませんよ。 FTPのプロトコルをちゃんと調べて、各通信時のテキストメッセージの意味を理解し、環境的に可能かどうかの判断をしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問