Practice: run clisp code via net

来源:互联网 发布:模拟战争软件 编辑:程序博客网 时间:2024/04/30 03:37

Clisp Codes

;;; read-eval-print-server.lisp;;;;;; read-eval-print loop server;;;;;; the oringial code was on below page of clisp:;;; http://clisp.org/impnotes.html#socket-ex-server;;;;;; limit the socket server to local connections("127.0.0.1") for security,;;; but it also work for internet ip if you do not limit the server.(let ((server (socket:socket-server 23 :INTERFACE "127.0.0.1")))  (format t "~&waiting for a connection on ~S:~D~%"  (socket:socket-server-host server)  (socket:socket-server-port server))  (unwind-protect      (loop       (with-open-stream (socket (socket:socket-accept server))(multiple-value-bind (local-host local-port)     (socket:socket-stream-local socket) (multiple-value-bind (remote-host remote-port)     (socket:socket-stream-peer socket)  (format t "~&connection: ~S:~D -- ~S:~D ~%"  remote-host remote-port local-host local-port)))(loop (when (eq :eof (socket:socket-status (cons socket :input))) (return)) (print (eval (read socket)) socket) (loop  :for c = (read-char-no-hang socket nil nil)  :while c) (format socket "ok~%") (terpri socket))))    (socket:socket-server-close server)))
;;; read-eval-print-client.lisp;;;;;; read-eval-print client(defun run-lisp-via-net (host lisp-codes &optional (port 23))  (with-open-stream   (socket (socket:socket-connect port host :external-format :dos))   (format socket "~A" lisp-codes)   (socket:socket-stream-shutdown socket :output)   (loop :for line = (read-line socket nil nil) :while line :collect line :do (format t "~A ~%" line))));; Test Cases(run-lisp-via-net "127.0.0.1"  "(ext:dir)")(run-lisp-via-net "127.0.0.1"  "(load \"http-client.lisp\")"  23)

Testing and results

start the server:

test the client:

Log outputted on server:



Q: what does this demo mean?

A: you can run any code via net as you want, no matter these codes is from client or on server. Clisp can make all data as code ... 

Enjoy~ Mars



0 0
原创粉丝点击