6

我有一个非常小的程序,它打开一个套接字并接受一个连接。然后它会抓取远程 IP 和端口。

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

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

Clozure手册列出了一个名为“发送到”的函数,但它说它用于 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))
4

2 回答 2

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)
于 2009-10-06T15:44:23.433 回答
4

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

于 2009-10-06T11:05:27.190 回答