ネットワークプログラミングの練習にインターネット自由協会の電子公告表示プログラムを作ろう

登さんがインターネット自由協会の電子公告をTELNETで公開されていました。
TELNETであれば簡単に内容を見れるので、誰でも見れることを目指すべき電子公告には適していますね!

登さんがこういうツイートをされていました。

TELNETを使う理由のひとつに次のようなことがあげられています。

HTTP を用いて電子公告を公開していると、外国人の意志ひとつで、突然日本人の電子公告を閲覧者が事 実上閲覧できない状態になってしまうリスクがあります。他方、TELNET プロトコルは、接続先のインターネットサーバーに閲覧者がアクセスするとサーバーから送付されてくる文字を単に画面上に表示するだけの、これ以上に単純化することができない程度に最も基礎的なプロトコルであることから、外国人の意志によっても、決してその挙動が変更されない安定性があります

そう、アクセスすれば送られてくるメッセージを表示するだけです。
これはネットワークプログラムの練習にいいのでは、ということでインターネット自由協会の電子公告を表示するコードを書いてみます。

import java.awt.Font;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import javax.swing.*;

void main() throws IOException {
    var f = new JFrame("インターネット自由協会");
    f.setLocation(300, 300);
    f.setSize(800, 600);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    var t = new JTextArea();
    t.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
    f.add(new JScrollPane(t));
    f.setVisible(true);

    try(var s = new Socket("koukoku.shadan.open.ad.jp", 23);
        var in = s.getInputStream();
        var r = new InputStreamReader(in, "Windows-31J"))
    {
        for (char ch; (ch = (char) r.read()) != 0;) {
            t.append(ch + "");
        }
    }
}

ウィンドウを表示したりいろいろとありますが、接続後の処理は受け取った文字を表示するだけになっています。

        for (char ch; (ch = (char) r.read()) != 0;) {
            t.append(ch + "");
        }

実行するとこうなります。

みんな自分の手元の言語でインターネット自由協会の電子公告を表示するコードを書くといいんじゃなかろうか。

ところでブログのヘッダー画像をStable Diffusion XLで生成するようにしたのだけど、結構いいのが出ててボツにするのが惜しいものが多いので、ここで供養しておきます。