- 締切済み
Javaを使ったチャットシステムについて
はじめまして。 チャットシステムを作ろうと思い他の方が制作されたソースコードを拝見させて頂いたのですがよくわかりませんでした。 よろしければ教えて頂けないでしょうか? よくわからなかったのは読込・書込処理の部分です。 どういう流れで会話のやり取りが行われているのかよくわかりません。 例えば、Aさんが書き込んでBさんがその書き込みを見るまで、のような一連の流れです。 ・読込処理 URL wi_url = new URL(p_url+"chat1.cgi"); URLConnection wi_connect = wi_url.openConnection(); wi_connect.setDoInput(true); wi_connect.setDoOutput(true); wi_connect.setUseCaches(false); OutputStream wo_stream = wi_connect.getOutputStream(); BufferedWriter wo_buffer = new BufferedWriter(new OutputStreamWriter(wo_stream)); wo_buffer.write("read", 0, 4); wo_buffer.flush(); wo_buffer.close(); InputStream wi_stream = wi_connect.getInputStream(); BufferedReader wi_buffer= new BufferedReader(new InputStreamReader(wi_stream)); ・書込処理 URL wo_url = new URL(p_url+"chat2.cgi"); URLConnection wo_connect = wo_url.openConnection(); wo_connect.setDoOutput(true); wo_connect.setDoInput(true); wo_connect.setUseCaches(false); OutputStream wo_stream = wo_connect.getOutputStream(); BufferedWriter wo_buffer = new BufferedWriter(new OutputStreamWriter(wo_stream)); wo_buffer.write(w_data, 0, w_data.length()); wo_buffer.flush(); wo_buffer.close(); InputStream wi_stream = wo_connect.getInputStream(); BufferedReader wi_buffer = new BufferedReader(new InputStreamReader(wi_stream));
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
ANo.1に推測で書いたことは合っていたようです。 ・chat2.cgiは送られてきたメッセージをchat.datというファイルに追記して、"Write OK"という文字列をレスポンスとして返す。 ・chat1.cgiは送られてきた"read"の文字列を読み捨てた後、chat.datの内容を読み出してレスポンスとして返す。 [AさんのPC]←→[HTTPサーバ]←→[BさんのPC] chat1.cgiやchat2.cgiはJavaではなくPerlという言語で書かれていて、HTTPサーバで実行されます。chat.datというファイルもHTTPサーバの中にあります。 質問文にあるJavaプログラムはAさんやBさんのPCでそれぞれ実行されます。chat1.cgiが返してきたそれまでのチャット内容をBさんのPCに表示する部分などは書かれていないので分かりません。
- salsberry
- ベストアンサー率69% (495/711)
質問文にあるコードから分かるのは ・chat1.cgiに対して"read"という4文字を書き込んで、chat1.cgiからのレスポンスを読み出そうとしている ・chat2.cgiに対してw_data(おそらくString型)の内容を書き込んで、chat2.cgiからのレスポンスを読み出そうとしている ことだけです。 きっとw_dataにはチャットのユーザが書き込んだメッセージが入っているのでしょう。 しかし、chat1.cgiやchat2.cgiがどんな処理をしていてレスポンスとして何を返してくるのかが不明です。 >Aさんが書き込んでBさんがその書き込みを見るまで 情報不足なので推測で答えます。 ・Aさんが「書込処理」を実行してメッセージをchat2.cgiへ送る。サーバがその内容を記録する。 ・Bさんが「読込処理」を実行すると、サーバが記録しているそれまでのチャット内容がBさんへ送られてくる。 このシステムを理解するにはchat1.cgi・chat2.cgiで行っている処理も調べる必要があります。
補足
回答ありがとうございます。 cgiの中身をそれぞれ見てみましたがやはりよくわかりませんでした。。。 よろしければ再度ご教授宜しくお願い致します。 chat1.cgi print "Content-type: text/html\n\n"; $data_file = './chat.dat'; read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); open(DATA, "$data_file") || die print "Can't read \n"; @chatdata = <DATA>; close(DATA); foreach $line(@chatdata) { print $line;} exit(0); chat2.cgi print "Content-type: text/html\n\n"; $data_file = './chat.dat'; read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); open(DATA, ">>$data_file") || die print "Can't open datafile \n"; print DATA "$buffer"; close(DATA); print "Write OK"; exit(0);