gpt4 book ai didi

sockets - 如何在Clozure Common Lisp中通过套接字进行通信?

转载 作者:行者123 更新时间:2023-12-03 11:56:31 24 4
gpt4 key购买 nike

在一个CCL REPL中,输入:

(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 from server”。永远不会沟通。

我确信这是我忽略的基本知识。我如何发送消息? READ-LINE不是从流中读取的正确方法吗?我从服务器写的不正确吗?如何建立基于双向简单字符串的通信?

最佳答案

您知道输出可以缓冲吗?

那是一个典型的问题。参见FINISH-OUTPUT and FORCE-OUTPUT

如果写入缓冲流,则必须确保缓冲输出实际上已完全交付。

? (WITH-OPEN-SOCKET (socket-stream :REMOTE-PORT 6667 
:REMOTE-HOST "localhost"
:CONNECT :ACTIVE
:REUSE-ADDRESS t)
(format t (READ-LINE socket-stream)))
hello from server.
NIL


---

? (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.~%")
(finish-output stream)
stream))
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/21) #x302000E3FD9D>

关于sockets - 如何在Clozure Common Lisp中通过套接字进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41167946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com