###ftpサーバーに保存されているファイル一覧を取得するプログラムを作成しています。
ffftpのようなftpクライアントアプリを自作しています。ftpサーバーに保存されているファイルの一覧表を取得しリストとして表示させるプログラムを作成したのですが、ある時からサーバーの情報を取得できなくなりました。
###コードの説明
このコードでは別クラスで取得したftpのログイン情報(Login_FTP.host,Login_FTP.ctrl_portなど)を使用してftpサーバーにログインし、サーバーに保存されているファイル一覧を取得します。
###原因箇所
// サーバからの接続をうけつける
dataSocket = dataServerSocket.accept();
↑この箇所で止まっていることはわかったのですが、なぜ止まったのかがわからないです。以前はここで止まることはなかったのですが、しばらく期間をおいて実行するとこの行から進むことができません
。期間をおいていた間はコードの追加・修正等はしていません。
原因と解決方法を教えていただけないでしょうか。
JAVA
1import java.io.BufferedReader; 2import java.io.File; 3import java.io.InputStreamReader; 4import java.io.PrintWriter; 5import java.net.ServerSocket; 6import java.net.Socket; 7 8public class List { 9 10 public static void ListMethod(){ 11 final String home = "/"; 12 13 Socket ctrlSocket = null; 14 PrintWriter ctrlOutput = null; 15 16 Socket dataSocket = null; 17 BufferedReader dataReader = null; 18 19 try { 20 // FTPサーバと8021番ポートでコネクションをはる 21 ctrlSocket = new Socket(Login_FTP.host, Login_FTP.ctrl_port); 22 23 // コマンドを書くよう 24 ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream()); 25 26 // FTPクライアント(このプログラムを実行するホスト)のアドレスを取得 27 byte[] local_address = ctrlSocket.getLocalAddress().getAddress(); 28 29 // FTPログイン 30 ctrlOutput.println("USER " + Login_FTP.user); 31 ctrlOutput.flush(); 32 ctrlOutput.println("PASS " + Login_FTP.pass); 33 ctrlOutput.flush(); 34 35 // ディレクトリに移動 36 ctrlOutput.println("CWD " + home); 37 ctrlOutput.flush(); 38 39 // 接続をまつ 40 ServerSocket dataServerSocket = new ServerSocket(0, 1); 41 // 待ちうけポートを取得 42 int data_port = dataServerSocket.getLocalPort(); 43 44 // PORTコマンドを作成 45 String port_command = "PORT "; 46 for (byte b : local_address) { 47 port_command += (b & 0xff) + ","; 48 } 49 port_command += (data_port / 256) & 0xff; 50 port_command += ","; 51 port_command += data_port & 0xff; 52 53 // FTPサーバに待ちうけている場所を教えてあげる 54 ctrlOutput.println(port_command); 55 ctrlOutput.flush(); 56 57 // NLSTコマンド 58 ctrlOutput.println("NLST"); 59 ctrlOutput.flush(); 60 61 // サーバからの接続をうけつける 62 dataSocket = dataServerSocket.accept(); 63 dataServerSocket.close(); 64 65 // サーバから送られてくる情報をよみとる 66 dataReader = new BufferedReader(new InputStreamReader( 67 dataSocket.getInputStream())); 68 System.out.println(dataReader); 69 70 for (String line = dataReader.readLine(); line != null; line = dataReader 71 .readLine()) { 72 // 表示 73 System.out.println("line ="+line); 74 File lineFile = new File(line); 75 myftp.ftp_filelistModel.addElement(lineFile); 76 } 77 myftp.loglistModel.addElement(Login_FTP.host +"のファイル一覧を取得しました"); 78 79 80 81 } catch (Exception e) { 82 e.printStackTrace(); 83 } finally { 84 if (dataReader != null) { 85 try { 86 dataReader.close(); 87 } catch (Exception e) { 88 e.printStackTrace(); 89 } 90 } 91 if (dataSocket != null) { 92 try { 93 dataSocket.close(); 94 } catch (Exception e) { 95 e.printStackTrace(); 96 } 97 } 98 99 if (ctrlOutput != null) { 100 ctrlOutput.close(); 101 } 102 if (ctrlSocket != null) { 103 try { 104 ctrlSocket.close(); 105 } catch (Exception e) { 106 e.printStackTrace(); 107 } 108 } 109 } 110 } 111 112} 113
あなたの回答
tips
プレビュー