指定されたファイルのアクセス要求が来た時に合計回数を示す数字を返せるようにしたいです。
具体的に言うと
$ java ex9_0 'http://localhost:12354/sort.cgi'
3 $ java ex9_0 'http://localhost:12354/sort.cgi' 4
という表示を端末に出せるようにしたいです。アクセス回数をstaticに入れればよいらしいのですがそれ以上がどうしてもわかりませんでした。少し丸投げになってしまうかもしれないのですが本気でわからないのでご教授いただけると幸いです。
Java
1import java.io.*; 2 import java.net.*; 3 4 public class rp9_2 { 5 public static void main(String args[]) { 6 try{ 7 ServerSocket ss = new ServerSocket(12354); 8 while(true) { 9 Socket s = ss.accept(); 10 InputStream instream = s.getInputStream(); 11 InputStreamReader isreader = new InputStreamReader(instream); 12 BufferedReader bfreader = new BufferedReader(isreader); 13 14 String theLine; 15 theLine = bfreader.readLine(); 16 theLine = theLine.substring(theLine.indexOf(" ")+1); 17 theLine = theLine.substring(0,theLine.indexOf(" ")); 18 theLine = theLine.substring(theLine.indexOf("/")+1); 19 System.out.print("filename: " + theLine + "\n"); 20 File theFile = new File(theLine); 21 if( theFile.exists() == false ) { 22 System.err.print("File does not exist:" + theLine + "\n"); 23 s.close(); 24 continue; 25 } 26 FileInputStream finstream = new FileInputStream(theFile); 27 InputStreamReader fisreader = new InputStreamReader(finstream); 28 BufferedReader fbfreader = new BufferedReader(fisreader); 29 30 OutputStream outstream = s.getOutputStream(); 31 OutputStreamWriter oswriter = new OutputStreamWriter(outstream); 32 BufferedWriter bfwriter = new BufferedWriter(oswriter); 33 PrintWriter pwriter = new PrintWriter(bfwriter); 34 35 pwriter.print("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"); 36 do { 37 theLine = fbfreader.readLine(); 38 if( theLine != null ) { 39 sleep(100); 40 pwriter.println(theLine); 41 pwriter.flush(); 42 } 43 } while( theLine != null ); 44 45 pwriter.flush(); 46 pwriter.close(); 47 } 48 } catch (Exception e) { 49 System.err.print(e); 50 } 51 } 52 53 static void sleep(long msec) { 54 try{ 55 Thread.sleep(msec); 56 }catch(InterruptedException ie) { 57 } 58 } 59}
ほんとにわからないのでよろしくお願いいたします。
せめてコードはマークダウンで
ああ、すみませんでした。たしかマークで囲むんでしたよね
ご指摘ありがとうございます。
コードが正しく囲めてないですね。
おそらく最後の「```」の前に改行がないからだとは思いますが、修正お願いします。
(プレビューで表示が見れるはずなので、参考にしつつ直してみてください。)
プレビューで見ていないのもそうですが、実際に投稿した内容を自分で確認しないっていう・・・
いわゆる丸投げを感じる残念な質問ですね。
プレビューで見れるんですね。ありがとうございます。ちょっとやってみます。dice142さん、momon-gaさんご迷惑をおかけしました。
dice142さん まだあまりなれていないのですがすこし改行を入れてみました。まあこれでも醜いのですがなんとか答えを頂けるとありがたいです。
もしかして「どうなれば正解か(マークダウンのコード)」が分かってなかったりしませんか?
momon-gaさん すみません。プレビューの存在を今まで恥ずかしながら知りませんでした。存在をおしえてくださってありがとうございます。いつも投稿するとなんでぐちゃぐちゃになってしまうのかよくわからなかったのですが今回momon-gaさんの私的でわかりました。ありがとうございます。
いえ、できてないです。
「}」と「```」の間に改行を入れないとコードブロックとして成り立っていないです。
ああすみません。マークダウン=、、、で囲むことかと思ったのですがどうやらmtsさんが思っていることと違ったのかもしれません。教えていただけるとありがたいです。不勉強なことお詫び申し上げます。
他の質問とか回答を見て確認されたほうがいいかもしれません。
それに全角スペースとか入れる必要はありません(構文エラーなので再現確認不可となります)。エディタからそのままコピペで貼り付ければきちんとインデントも維持されます。
こちらを見ていただければと。 https://teratail.com/help/question-tips
「```」で手動で囲むより、コードをドラッグしてコードボタンを押すほうが伝わるかもしれませんね。
いつも見る形になった気がします。みなさんのご指摘してくださっていることがようやくわかりました。と思います。かさねがさねすみませんでした
コードブロックOKです。
あとはコードのインデントを揃えていただければ助かります。
出来る限り頑張ります!
どうでしょうか?
最後のちょこんと置かれた全角スペース これ実際のコードにあるものではないですよね・・。
やはりdice142さんが仰るようにコード部分を選択してcodeボタンを押すのが確実かと思います。
コードはかなり見やすくなりました。
mts10806様の仰る通り、全角空白があって実行できないと思いますので、
実行できるコードでその見やすさにしていただけるとパーフェクトかなと思います。
分かりました。少しやってみようと思います。
回答2件
あなたの回答
tips
プレビュー