応答を返す UDP Server
自動起動スクリプトの作成 - Shammerismの UDP Server は、メッセージを受信したらそれをそのままクライアントのIPとかと一緒にログに記録するだけの動作だが、これが応答を返すようにしてみた。
(defun start () (let ((server (make-socket :type :datagram :local-host "0.0.0.0" :local-port 7001 :format :binary))) (with-open-file (f "/var/log/clozure-udp-server.log" :direction :output :if-exists :supersede :if-does-not-exist :create) (do () () (multiple-value-bind (buffer length client-ip client-port) (receive-from server 512) (when (equalp buffer #(81 85 73 84 10)) (return)) (format f "[~A:~A] Received byte length is ~A, message is ~A~%" (ipaddr-to-dotted client-ip) client-port length (decode-string-from-octets buffer :external-format :UTF-8)) (force-output f) ;;; ;;; Receive ;;; (multiple-value-bind (char-vector rcv-len) (encode-string-to-octets (format nil "OK~%") :external-format :utf-8) (send-to server char-vector rcv-len :remote-host client-ip :remote-port client-port))))) (format t "FINISH!~%"))) (save-application "ccludp" :toplevel-function #'start :prepend-kernel t)