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

发布于 2024-08-06 17:48:58 字数 650 浏览 4 评论 0原文

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

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

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

Clozure 手册列出了一个名为“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))

I have a very small program which opens a socket and accepts a connection. It then grabs the remote IP and port.

I'd like to send a text message to the remote computer (telnet) and close the connection.

I can't determine which function is for sending a message to the telnet client.

The Clozure manual lists a function called "send to" but it says it's for UDP sockets and I'm working with TCP sockets.

I hope someone can tell me what the proper function is, or, if "send-to" is the proper function, how to use it properly.

Thanks

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧时模样 2024-08-13 17:48:58

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)

The documentation of CCL:ACCEPT-CONNECTION says that it returns a stream.

So you can use the normal I/O operations (example: PRINC) of Common Lisp with that stream. For I/O operations see the HyperSpec chapters on 'streams' and the '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)
带上头具痛哭 2024-08-13 17:48:58

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

In SBCL (using usocket), I use the SOCKET-STREAM function to return a lisp stream, then use FORMAT, WRITE and the like to send things across.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文