TCP サーバーと TCP クライアント

ここでは簡単なエコーサーバー、つまりオウム返しをするサーバーを作ります。TCPサーバを書く2TCPクライアントを書くを見て awk で作成してみました。

まず、サーバー側は以下のようなものです。

#! /usr/bin/gawk -f
# tcp_server.awk
# http://code.nanigac.com/source/view/547

BEGIN {
    echo_service = "/inet/tcp/1234/0/0";
    while (1) {
        if ((echo_service |& getline) > 0) {
            print $0 |& echo_service;
        }
        close(echo_service);
    }
}

1234 番ポートに来たものを全てそのまま 1234 番ポートにエコーするようなもので、それ以上の機能もありません。

次にクライアントですが、メッセージを送信し、サーバーから受け取ったものを表示するものです。

#! /usr/bin/gawk -f
# echo_client.awk
# http://code.nanigac.com/source/view/548

BEGIN {
    echo_service = "/inet/tcp/0/localhost/1234";
    print "Hello World!" |& echo_service;
    while ((echo_service |& getline) > 0) {
        print $0;
    }
    close(echo_service);
}

別のターミナルで動作させて動作状況を確認すると良いでしょう。

クライアント側には次のように表示されます。

$ gawk -f echo_client.awk
Hello World!

つまり、クライアントから送信したメッセージがそのまま戻ってきていることが分かります。

どちらも非常にシンプルに記述できていることが分かると思います。 最初は /inet を用いた通信は癖があってとっつきにくいのですが、使っていくと非常に良くできていることが分かります。