- 締切済み
javaプログラム初心者です。
入力ファイルの内容をWebサーバプログラムへ送信し、サーバからの応答を別ファイルに出力するクライアントプログラムを作っているのですが、出力ファイルにはなにも書き込みがされていません。(サーバからの応答は事前に不明でその長さが可変長である) 以下が作ったプログラムです。間違っているところを詳しくご指摘いただけるとありがたいです。お願いします。 import java.net.*; import java.io.*; public class client{ static final int BUFSIZE = 1792; public static void main(String[] args){ try{ String server = args[0]; //接続先のIPアドレス File file1 = new File(args[1]); //入力ファイル(HTTPリクエスト) FileReader filereader = new FileReader(file1); BufferedReader br = new BufferedReader(filereader); int serverport = Integer.parseInt(args[2]); //ポート番号 File file2 = new File(args[3]); //サーバからの応答をファイルに書き込む用 FileWriter filewriter = new FileWriter(file2); BufferedWriter bw = new BufferedWriter(filewriter); byte[] bytebuffer = new byte[BUFSIZE]; String str; while((str = br.readLine()) != null){ //入力ファイルの内容を1行ずつ読み込む bytebuffer = str.getBytes(); //入力ファイルの文字列をバイトに変換 } Socket socket = new Socket(server,serverport); //ソケットの生成 System.out.println("Connected to server...sending echo string"); InputStream in = socket.getInputStream(); //入出力ストリームの取得 OutputStream out = socket.getOutputStream(); out.write(bytebuffer); //文字列を送信 int receive; while((receive = in.read(bytebuffer))!=-1){ bw.write(new String(bytebuffer)); //サーバからの応答をファイルに出力 } bw.close(); socket.close(); }catch(IOException e){ } } }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- okwave789
- ベストアンサー率0% (0/1)
マルチポスト http://okwave.jp/qa/q8885520.html こっちで回答されている。
- ahoo_chieokure
- ベストアンサー率52% (34/65)
> 実際にどのように修正すればよいのでしょうか? ・「!」の行を変更、「+」の行を追加 と書いています。 何か問題が有りましたでしょうか。 こちらで「出力ファイルにはなにも書き込みがされていません。」は改善されていることは確認済です。
- Ogre7077
- ベストアンサー率65% (170/258)
> 入力ファイルの内容を1行ずつ読み込む 読み込んだ行データを、最終行以外を読み捨てています > bytebuffer = str.getBytes(); 事前に確保したバッファ領域 new byte[BUFSIZE] を消し去り、 代わりに「JVMが用意したヒープだか定数だかの領域」に書き換えています > in.read(bytebuffer) バッファ領域ではない「JVMが用意したヒープだか定数だかの領域」に読み込んでいるので、 正常に作動するのか保障できません。 全体を通して助言 * バイナリとテキストの処理を混在させるのはバグの元です。 * 効率的を目指すあまり失敗しているので、富豪的プログラミングを心がけましょう
補足
実際、どのように修正すればよいのでしょうか?
- ahoo_chieokure
- ベストアンサー率52% (34/65)
>間違っているところを詳しくご指摘いただけるとありがたいです。 (0)インデントが付いていない (1)//入力ファイル(HTTPリクエスト) の内容 ・「!」の行を変更、「+」の行を追加 ----- ! //String server = args[0]; //接続先のIPアドレス ! //File file1 = new File(args[1]); //入力ファイル(HTTPリクエスト) ! //FileReader filereader = new FileReader(file1); ! String str = "GET this_causes_error \n\n"; ! //while((str = br.readLine()) != null){ //入力ファイルの内容を1行ずつ読み込む bytebuffer = str.getBytes(); //入力ファイルの文字列をバイトに変換 ! //} bw.write(new String(bytebuffer)); //サーバからの応答をファイルに出力 + System.out.print(new String(bytebuffer)); } -----
補足
実際にどのように修正すればよいのでしょうか?
補足
その変更のところをどのように変更したらいいのかがわからないんです。