The AWK~plus Language Specification

AWK~plus

Internetworking とは

AWK~plus の入力ファイルは、 URL 指定による 一般ファイルと同じインターフェイスでの読み込みが可能。 さらに、ソケット通信機能を利用することにより、TCP/IP, UDP での双方向通信が可能になりました。

    ファイル名: "inet://PROTOCOL/LOCAL-PORT/REMOTE-HOST/REMOTE-PORT
            [ /接続タイムアウト ] [ /#文字コードセット ]"
PROTOCOL:
通信プロトコルを指定する (tcp または udp)
LOCAL-PORT
このコンピュータのローカルポートを使用して通信する (TCP/IP ならサーバとして動作)
REMOTE-HOST
接続先の IP アドレス または ホスト名
REMOTE-PORT
接続先のポート番号
接続タイムアウト (オプション)
接続タイムアウトを、秒単位で指定する (0の場合は、無限)
#文字コードセット (オプション)
文字コードセットを指定する
    双方向パイプ: |&
print[f] |& ファイル名
ファイル名 |& getline の形式で使用する。

daytime

daytime は人が読める形式で時間を出力するサービスで、現在の時刻をテキスト形式で返す。

公開NTPサーバにアクセス

make daytime
 $(PLUS) Daytime.awk /inet/tcp/0/time.xmission.com/daytime

 # Thu Jun 30 00:03:56 2011

BEGIN {
    inet = ARGV[1]
    inet |& getline
    print "#", $0
    close(inet)
}

UDPディレクティッド・ブロードキャストで送信

UDP通信では複数クライアントでの同時受信が可能。

make udps   # UDPサーバ
 $(PLUS) DaytimeServer.awk /inet/udp/0/localhost/8813

make udp   # UDPクライアント
 $(PLUS) Daytime.awk /inet/udp/8813/localhost/0

 # Thu Jun 30 15:05:05 JST 2011

BEGIN {
    inet = ARGV[1]
    while(1) {
        if (inet ~ /tcp/) printf "" |& inet  # TCP/IP: 空文字を送信しクライアント接続を待つ
        print strftime() |& inet
        if (inet ~ /tcp/) close(inet)  # TCP/IPなら閉じる
        system("sleep 10")
    }
}

http (HyperText Transfer Protocol)

Webサーバとクライアント (ブラウザ) 間で、 ウェブページを送受信すプロトコルで、要求メッセージに対して応答メッセージが返される。

検索エンジンにアクセス

検索エンジンにアクセスして、検索結果を表示する。

make query
 $(PLUS) Query.awk www.google.co.jp /search?q=AWK~plus

BEGIN {
    host = ARGV[1]
    query = ARGV[2]
    inet = "/inet/tcp/0/" host "/80/"
    printf "GET %s%s HTTP/1.0\r\n\r\n", host, query |& inet
    while (0 < (inet |& getline))
        print
    close(inet)
}

関連リンク


Internetworking
  1. daytime
    1. 公開NTPサーバにアクセス
    2. UDPディレクティッド・ブロードキャストで送信
  2. http (HyperText Transfer Protocol)
    1. 検索エンジンにアクセス