Clozure Common Lisp - TCP套接字编程 - 发送回复

6
我有一个非常简单的程序,它打开一个套接字并接受连接。然后获取远程IP和端口。
我想向远程计算机(telnet)发送文本消息并关闭连接。
我无法确定哪个函数用于向telnet客户端发送消息。 Clozure手册列出了一个名为“send to”的函数,但它说它是用于UDP套接字,而我正在使用TCP套接字。
我希望有人告诉我正确的函数是什么,或者如果“send-to”是正确的函数,如何正确使用它。
谢谢
(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))
2个回答

8

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

因此,您可以使用 Common Lisp 的常规 I/O 操作(例如:PRINC)与该流一起使用。有关 I/O 操作,请参阅 HyperSpec 的“streams”和“printer”章节。

(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)

4
在SBCL中(使用usocket),我使用SOCKET-STREAM函数返回一个lisp流,然后使用FORMAT、WRITE等函数来发送数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接