Clozure Common Lisp的 - TCP Socket编程 - 发送回复
-
19-09-2019 - |
题
我有打开一个插座和接受连接的非常小的程序。然后它抓住远程IP和端口。
我想发送文本消息到远程计算机(远程登录),并关闭连接。
我不能确定哪个功能是用于将消息发送到Telnet客户端。
在 Clozure手册列出了调用函数“发送到”,但它说,这是对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))
解决方案
CCL的文件:ACCEPT-CONNECTION说,它返回一个流
所以,你可以使用正常的I / O操作(例如:PRINC)Common Lisp的与该流。用于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)
其他提示
在SBCL(使用usocket),我使用Socket-STREAM函数返回一个口齿不清流,然后使用FORMAT,WRITE等跨发送的东西。
不隶属于 StackOverflow