入力ファイルの内容を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){
}
}
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
マルチポスト
http://oshiete.goo.ne.jp/qa/8885520.html
こっちで回答されている。
参考URL:http://stakasaki.at.webry.info/200512/article_3. …
No.3
- 回答日時:
> 実際にどのように修正すればよいのでしょうか?
・「!」の行を変更、「+」の行を追加
と書いています。
何か問題が有りましたでしょうか。
こちらで「出力ファイルにはなにも書き込みがされていません。」は改善されていることは確認済です。
No.2
- 回答日時:
> 入力ファイルの内容を1行ずつ読み込む
読み込んだ行データを、最終行以外を読み捨てています
> bytebuffer = str.getBytes();
事前に確保したバッファ領域 new byte[BUFSIZE] を消し去り、
代わりに「JVMが用意したヒープだか定数だかの領域」に書き換えています
> in.read(bytebuffer)
バッファ領域ではない「JVMが用意したヒープだか定数だかの領域」に読み込んでいるので、
正常に作動するのか保障できません。
全体を通して助言
* バイナリとテキストの処理を混在させるのはバグの元です。
* 効率的を目指すあまり失敗しているので、富豪的プログラミングを心がけましょう
No.1
- 回答日時:
>間違っているところを詳しくご指摘いただけるとありがたいです。
(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));
}
-----
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Java java final 1 2022/06/10 22:49
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでPowerPointからExcelにデ...
-
VB6側からテキストファイルをク...
-
unicode文字列(日本語)のファイ...
-
excelにテキストファイルの指定...
-
access vbaでCSVファイルを文...
-
特定フォルダ内のテキストファ...
-
VBSを用いてIPアドレスを取得し...
-
バッチでiniファイルの編集
-
VBAで任意のフォルダ内のファイ...
-
VBAで新しい日付順にファイルを...
-
Excel.VBA テキストファイルを...
-
複数行の文字列を変数として使...
-
テキストファイルを直接置換す...
-
A列をテキストファイル名に、B...
-
フォルダ比較の結果をテキスト...
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
大量のフォルダからひとつのフ...
-
バッチ処理でファイルの中身を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで新しい日付順にファイルを...
-
VBAでPowerPointからExcelにデ...
-
複数行の文字列を変数として使...
-
BCPユーティリティの使用法_...
-
特定フォルダ内のテキストファ...
-
テキストファイルを直接置換す...
-
VB6側からテキストファイルをク...
-
テキストファイルの行頭に文字...
-
Excel.VBA テキストファイルを...
-
バッチでiniファイルの編集
-
unicode文字列(日本語)のファイ...
-
access vbaでCSVファイルを文...
-
ある文字列を含む行の抽出
-
複数のCSVの指定行だけを残し、...
-
A列をテキストファイル名に、B...
-
fortranでのcsvファイルを出力...
-
ExcelVBAで以下のマクロを作成...
-
RandomとBinaryモードの違い
-
ソースコードの差分がある行番...
-
C#でのファイル編集と上書き保...
おすすめ情報