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

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

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

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

Java

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

Eclipse

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

0回答

657閲覧

ServerSocket.accept()から進めない

0sksksk

総合スコア17

FTP

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

Java

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

Eclipse

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

2クリップ

投稿2020/12/01 00:53

###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

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

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

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

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

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

dodox86

2020/12/01 01:54

> ある時からサーバーの情報を取得できなくなりました。 "ある時"、とは何でしょうか。Windows Updateとか、何らかのサーバーのソフト環境の更新などでしょうか? > しばらく期間をおいて実行するとこの行から進むことができません しばらく期間をおいて実行ではダメということは、反対に、期間をおかなければ進むのですか? この辺りの状況が本質問を読んだ者に良く伝わらないと思います。
0sksksk

2020/12/08 00:57

回答ありがとうございます。あいまいな説明になってしまい申し訳ありません。 >Windows Updateとか、何らかのサーバーのソフト環境の更新などでしょうか? サーバーの環境更新に関しては把握することができないのですが、windows updateは行われました。 >反対に、期間をおかなければ進むのですか? 約1か月前(具体的に何日前というのは覚えていませんが。。。)最後にこのプログラムを動かした時は進んでいました。それから今まで放置していたのですが、先週起動してみると進まなくなりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問