(require 'usocket) (defpackage :myserver (:use :common-lisp :usocket) (:nicknames :mysrv) (:export "start-server")) (in-package :mysrv) (defun start-server (port) (socket-server "127.0.0.1" port #'(lambda (stream) (format stream "~a~%" "hello usocket"))))該函數參考 https://common-lisp.net/project/usocket/api-docs.shtml
(require 'usocket) (defpackage :myclient (:use :common-lisp :usocket) (:nicknames :mycli) (:export "start-client")) (in-package :myclient) (defun start-client (ip port) (let ((sock (usocket:socket-connect ip port))) (progn (force-output (usocket:socket-stream sock)) (do ((line (read-line (usocket:socket-stream sock) nil) (read-line (usocket:socket-stream sock) nil))) ((not line)) (format t "~A" line)))))該函數參考 http://common-lisp.net/project/common-lisp-beginner/sockets_doc.html
測試環境爲emacs+slime,telnet,並假設你已經安裝好quicklisp。 html
服務端啓動後,使用telnet測試其是否能夠成功運行,圖示以下: web
客戶端鏈接服務端,圖示以下: api
可見,telnet和客戶端都正確返回"hello usocket"這一字符串。 websocket
客戶端發送函數: 併發
(require 'usocket) (defvar sock '()) (defun myclient (host port) (setq sock (usocket:socket-connect host port))) (defun my-send (buf) (if sock (progn (format (usocket:socket-stream sock) "~A" buf) (force-output (usocket:socket-stream sock)) ) nil))
本節參照: socket
http://stackoverflow.com/questions/25608424/websocket-client-in-common-lisp-with-usocket-library 函數
http://stackoverflow.com/questions/17257567/receiving-data-through-lisp-usocket 測試
http://www.lispworks.com/documentation/HyperSpec/Body/f_finish.htm#force-output ui
可正常連接服務端併發送數據,請自行測試。enjoy youself ! spa