こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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){
}
}
}

投稿日時 - 2015-01-08 16:48:28

QNo.8884436

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

マルチポスト
http://okwave.jp/qa/q8885520.html
こっちで回答されている。

参考URL:http://stakasaki.at.webry.info/200512/article_3.html

投稿日時 - 2015-01-13 03:34:48

> 実際にどのように修正すればよいのでしょうか?

・「!」の行を変更、「+」の行を追加
と書いています。
何か問題が有りましたでしょうか。
こちらで「出力ファイルにはなにも書き込みがされていません。」は改善されていることは確認済です。

投稿日時 - 2015-01-10 13:20:06

補足

その変更のところをどのように変更したらいいのかがわからないんです。

投稿日時 - 2015-01-13 00:11:13

ANo.2

> 入力ファイルの内容を1行ずつ読み込む
読み込んだ行データを、最終行以外を読み捨てています

> bytebuffer = str.getBytes();
事前に確保したバッファ領域 new byte[BUFSIZE] を消し去り、
代わりに「JVMが用意したヒープだか定数だかの領域」に書き換えています

> in.read(bytebuffer)
バッファ領域ではない「JVMが用意したヒープだか定数だかの領域」に読み込んでいるので、
正常に作動するのか保障できません。

全体を通して助言
* バイナリとテキストの処理を混在させるのはバグの元です。
* 効率的を目指すあまり失敗しているので、富豪的プログラミングを心がけましょう

投稿日時 - 2015-01-09 16:30:56

補足

実際、どのように修正すればよいのでしょうか?

投稿日時 - 2015-01-10 00:25:38

>間違っているところを詳しくご指摘いただけるとありがたいです。
(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));
}
-----

投稿日時 - 2015-01-08 18:46:34

補足

実際にどのように修正すればよいのでしょうか?

投稿日時 - 2015-01-10 00:26:01

あなたにオススメの質問