#:g1: cl-netstringsの紹介

Posted 2014-06-29 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の181日目です。

cl-netstringsとはなにか

 cl-netstringsは、Daniel Janus氏作のCommon Lispでnetstrigを扱うためのライブラリです。

パッケージ情報

パッケージ名cl-netstrings
Quicklisp
CLiKihttp://cliki.net/cl-netstrings
Quickdocshttp://quickdocs.org/cl-netstrings
CL Test Grid: ビルド状況cl-netstrings | CL Test Grid

インストール方法

(ql:quickload :cl-netstrings)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 Netstringというのは、D. J. Bernsteinが考案したネットワーク上での文字列のやりとりのためのシンプル形式のようですが、

 APIはシンプルに、netstrings:write-netstringと、netstrings:read-netstringの2つのみ。
netstrings:read-netstringの方は、シェルで、

$ echo '18:おはよう日本,' | nc -l -p 12345

のようにしておいた場合、

(with-open-stream (s (usocket:socket-stream 
                      (usocket:socket-connect 
                       "localhost" 12345
                       :element-type '(unsigned-byte 8))))
  (print (netstrings:read-netstring s)))
;>>  
;>>  "おはよう日本" 
;=>  "おはよう日本"

のように読み取れます。
netstrings:write-netstringの方は、字数と終端のコンマの面倒はみてくれるので、

(let* ((listen (usocket:socket-listen "127.0.0.1"
                                     12345
                                     :reuse-address T
                                     :element-type '(unsigned-byte 8)))
       (con (usocket:socket-accept listen)))
  (netstrings:write-netstring "おはよう日本" (usocket:socket-stream con))
  (force-output (usocket:socket-stream con))
  (usocket:socket-close listen))

のように送りたい文字列だけ記述すれば良いようになっています(デフォルトのエンコーディングはUTF-8)。

 

まとめ

 今回は、cl-netstringsを紹介してみました。
Quicklispは結構ニッチなものが結構あるようです。比率としては寧ろ多目な気がしないでもありません。

comments powered by Disqus