2009-10-06 51 views
6

我有一个非常小的程序,它打开一个套接字并接受连接。然后抓取远程IP和端口。Clozure Common Lisp - TCP Socket编程 - 发送回复

我想发送短信到远程计算机(telnet)并关闭连接。

我无法确定哪个函数用于向telnet客户端发送消息。

Clozure manual列出了一个名为“send to”的函数,但它表示它是用于UDP套接字,而且我正在使用TCP套接字。

我希望有人能告诉我什么是正确的功能,或者如果“发送”是正确的功能,如何正确使用它。

感谢

(setq my-socket (ccl:make-socket :connect :passive :format :text 
     :local-port 20000 :reuse-address t)) 

(setq connection (ccl:accept-connection my-socket)) 

(setq remote-host (ccl:remote-host connection)) 

(setq remote-port (ccl:remote-port connection)) 

回答

8

CCL:ACCEPT-CONNECTION的文档说它返回一个流。

因此,您可以使用Common Lisp的普通I/O操作(例如:PRINC)与该流。有关I/O操作,请参阅“流”和“打印机”上的HyperSpec章节。

(defun st (port) 
    (ccl:with-open-socket (socket :connect :passive 
           :format :text 
           :local-port port 
           :reuse-address t) 
    (with-open-stream (stream (ccl:accept-connection socket)) 
     (princ "CCL example response" stream)))) 

; example call 
(st 20000) 
3

在SBCL(使用usocket),我使用SOCKET-STREAM函数返回一个口齿不清流,那么使用的格式,写,等等跨送东西。