在一个CCL REPL我进入:如何通过Clozure Common Lisp中的套接字进行通信?
(WITH-OPEN-SOCKET (socket :LOCAL-PORT 6667
:LOCAL-HOST "localhost"
:CONNECT :PASSIVE
:REUSE-ADDRESS t)
(let ((stream (ACCEPT-CONNECTION socket :wait t)))
(format stream "hello from server.~%")))
它等待连接。
在另一个CCL过程中,我输入:
(WITH-OPEN-SOCKET (socket-stream :REMOTE-PORT 6667
:REMOTE-HOST "localhost"
:CONNECT :ACTIVE
:REUSE-ADDRESS t)
(format t (READ-LINE socket-stream)))
此时这一过程进入等待。它既不从服务器读取,也不退出。
但是,客户端连接到服务器的那一刻,服务器将以NIL退出。显然至少建立了一个连接,但字符串“来自服务器的Hello”。从未得到沟通。
我确定这是我忽略的一些基本内容。我如何发送消息? READ-LINE不是从流中读取数据的正确方法吗?我是否从服务器写错了?我将如何建立一个双向简单的基于字符串的通信?
还有':format:text'选项(http://stackoverflow.com/a/1526444/124319),不知道这是否有帮助。 – coredump
@coredump格式的默认值是根据CCL文档的文本。所以这是不需要的。但是,谢谢。 –