Shammer's Philosophy

My private adversaria

Lisp UDP Server

Lisp UDP Client - Shammerismの続編的な内容。UDP Server を一番簡単な形で書いてみた。ClozureCL での実装例。

(let ((server (make-socket :type :datagram
			   :local-host "127.0.0.1"
			   :local-port 7001
			   :format :binary)))
  (do ()
      ()
    (multiple-value-bind (buffer length client-ip client-port)
	(receive-from server 512)
      (format t "Received data is ~A~%" buffer)
      (format t "Received data length is ~A~%" length)
      (format t "SRC-IP addr is ~A~%" client-ip)
      (format t "SRC-Port is ~A~%" client-port))))

receive-from は 4 つのデータを返す。そのため、multiple-value-bind で返されるデータを全て受け取って、それぞれの内容を表示するというようにしてみた。これは Ctrl-C 等で強制終了しないと終わらない。まあ、表示されるデータは binary の配列だし、IP Address も dotted な表記じゃないからよくわからない。でもサンプルなのでこれでよし。今後必要な場合は、この内容をベースに改良を加えていけばいい。