代码之家  ›  专栏  ›  技术社区  ›  BlueBadger

clozure common lisp-TCP套接字编程-发送回复

  •  6
  • BlueBadger  · 技术社区  · 15 年前

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

    我想给远程计算机(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))
    
    2 回复  |  直到 13 年前
        1
  •  8
  •   Rainer Joswig mmmmmm    15 年前

    ccl:accept-connection的文档说明它返回一个流。

    因此,您可以在该流中使用公共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)
    
        2
  •  4
  •   Vatine    15 年前

    在sbcl(使用usocket)中,我使用socket-stream函数返回一个lisp流,然后使用format、write和like来发送消息。

    推荐文章