Practice: run clisp code via net

9 篇文章 0 订阅

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值