できたこと・できてないこと

さきほどまで、2点間でコネクションを開いて、データ送受信をするプログラムを書いてきました。 すこしその特徴をまとめましょう。

交互に通信

実は、今回のプログラム互い違いに通信してました。逆にいうと、双方のユーザが好きなタイミングでメッセージを送ることができていません。 それは、プログラムが、「標準入力を待つか」「ネット入力を待つか」のどちらかしかできないからです。一度待ち始めると、途中で止めづらい。 で、このあたりはマルチスレッドをつかうと簡単に解消できるのですが、またスレッド編のGUI multichatで解説しましょう。

TCP 接続

今回あつかったのは TCP 接続です。 2点間の通信を担当し、パケット落ちなどがあると再送手続きなどしてくれます。 一方で、ネットワークの勉強をした人なら、 UDP 接続というのも聞いたことがあるかと思います。 パケットを直接おくるためのもので、マルチキャストやブロードキャストも可能ですが、パケット落ちなどがあっても、利用者側で対応しなくてはいけません。

今回は、再送制御などは TCP にお任せしています。

HTTP access は?

Web page にアクセスしようと思えば、一応 TCP 接続で Web server の http ポート(標準: 80)にアクセスすれば、一応お話できます。 でも、HTTP protocol を理解してないといけません(「http telnet」などで検索すると、感じが分かってもらえるかと)。

ただ、Java には標準で java.net.URLクラスがあり、java.net.URLConnection 経由で java.io.InputStreamを取得し、データの中身を取得することができます。

sampleNet/URLAccess

String urlString = (args.length < 1)?  "http://www.fine.cs.kobe-u.ac.jp/": args[0];
URL url = new URL(urlString);
URLConnection con = url.openConnection();
/* InputStream 取得 */
InputStream in0 = con.getInputStream();
// あとは InputStream でお好きに

このあとサンプルプログラムでは、対象がテキストであることを前提に、java.io.BufferedReader をつかって1行ずつよみとり、結果を System.out.println(line)で出力しています。