ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのネットワークプログラミング

  • mixiチェック
  • このエントリーをはてなブックマークに追加
「サーバープログラム起動直後に、カレントディレクトリのファイルを取得して、画面にファイル数とファイル名を表示させる」

//実行例
>java Server
2
1.Server.java
2.Server.class

というプログラムなんですが、コンパイルも実行もできるのにネットワークエラーになります・・・・。
原因がいまいちわかりませんので、指摘していただけたらと載せました。
よろしくお願いします。


import java.io.*;
import java.net.*;
import java.io.File;

class Server
{
public static void main(String args[]) {
ServerSocket servsock = null;
Socket sock = null;
BufferedWriter outstr = null;
PrintWriter outstr2 = null;
File currentdir = null;
File[] filelist = null;
int filenumber = 0;
int i;

try {

sock = servsock.accept();

File Currentdir = new File("./");
File[] Filelist = currentdir.listFiles();
filenumber = filelist.length;

System.out.println(filenumber);

for (i = 0; i <= filelist.length; i++)
{
String filename = filelist[i].getName();
System.out.println((i + 1) + "." + filename);
}
}

catch(Exception e) {
System.err.println("ネットワークエラーです") ;
System.exit(1);
}

}
}

コメント(9)

先生が、ソケットを使ってって言ってましたか?
そうでないなら、
import java.io.File;

class Server {
public static void main(String args[]) {
File currentdir = new File("./");
File[] filelist = currentdir.listFiles();

System.out.println(filelist.length);

for (int i = 0; i < filelist.length; i++) {
String filename = filelist[i].getName();
System.out.println((i + 1) + "." + filename);
}
}

}
コレでよいはずなのですが。
クライアントの起動があるなら、
try {
ServerSocket serverSocket = new ServerSocket(5555);
serverSocket.accept();
} catch (IOException e) {
e.printStackTrace();
}
コレをFile currentdir = new File("./");
の前の行に追加すればぉkですけども、
コマンドを見る限りはクライアント側のソケットを呼んでいるようには見えませんし…
とりあえず、元のプログラムで起こってるエラーは、ネットワークエラーでもなんでもなく、ぬるぽですね。
エラーメッセージを握りつぶしちゃうのは、あまりお勧めできません。
その内、配列のそえじ飛び出しちゃったよ例外を吐きそうだね。

コンパイル通ったからって正しく動くことはなんら担保去れないでしょ

むしろ、通った後から本当の戦いは始まる
>コ(´・ェ・`)ロ さん
詳しい回答、ありがとうございます。
明日やってみます。

>seraphさん
そうでした、すみません。
ネットワークエラーはそう表示させてるだけでした。

>あとわいとさん
すみません、一行目がよくわかりません。
配列の上限を超えて入れちゃうってことでしょうか?

確かに、今までもコンパイルはできても正しく動作しないことがありました。
まさに通った後が戦いですね。
できるまで頑張ってみます。
配列の添え字ってのは
int[] hoge;
hoge[ここのこと]
indexとも言いますね。

あ、もしかして、問題の意図は、

サーバ側
→クライアントから接続があったら、
クライアントにカレントディレクトリ内のファイルの名前を送信する

クライアント
→サーバに接続すると、サーバのカレントディレクトリ内のファイルの名前がコンソールに出力される

という事なのかしら?
だとすると私の提示したソースだと×ですねぇ。

> コ(´・ェ・`)ロ さん
説明ありがとうございます^^

問題は
サーバ側がクライアントからの接続を受ける前にカレントディレクトリ内のファイル数、ファイル名を表示させるというものです。

この場合はサーバ単体でもできるんですよね・・・・・?

そうすると、最初のレスで言われたとおり、ソケットは必要くなるのかな・・・と。


すみません、理解するのに時間がかかるほうなのでお手間取らせますあせあせ(飛び散る汗)
この場合はサーバ単体でもできるんですよね・・・・・?
うんうん。
先に表示したいなら、
>2
に書いたのを、
>1
に書いたforループの後に持ってくればぉk。
でも、接続が来るまで待つから、
eclipseとか使ってないと、
プロセス切る(プログラム終了する)のがめんどくさいですけども。
> コ(´・ェ・`)ロ さん
わかりました、ありがとうございます^^

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング