gpt4 book ai didi

sockets - 从 lisp 中的套接字流读取行

转载 作者:可可西里 更新时间:2023-11-01 02:33:59 25 4
gpt4 key购买 nike

我正在 lisp 中的 TCP 客户端上工作,并且在正确读取/打印套接字流时遇到困难。当客户端向服务器发送数据时,它应该会收到响应,我需要将其写入标准输出。这工作正常,除了我遇到响应打印两次的问题。如果我有多个命令被发送,只有最后一个会被打印两次。这是我的代码:

(defun socket-print (string socket)
(write-line string (usocket:socket-stream socket))
(force-output (usocket:socket-stream socket)))


(defun socket-read (socket)
(write-line (read-line (usocket:socket-stream socket) nil)))


(defun mytest (command)
(let ((socket (usocket:socket-connect _IP_ _PORT_)))
(socket-print command socket)
(socket-read socket)))

最佳答案

我不认为它打印了两次。我认为它是打印(通过write-line)一次,然后write-line返回该行, REPL 正在打印返回值。例如,如果您修改 mytest 以返回 nil,我想您会看到您期望的输出:

(defun mytest (command)
(let ((socket (usocket:socket-connect _IP_ _PORT_)))
(socket-print command socket)
(socket-read socket)
nil))

这应该打印带有write-line的行,然后返回nil,REPL将打印nil .将其与:

CL-USER> (defun echo (line)
(write-line line))
ECHO
CL-USER> (echo "hello")
hello
"hello"
CL-USER> (progn
(echo "hello")
(echo "world"))
hello
world
"world"
CL-USER> (progn
(echo "hello")
(echo "world")
nil)
hello
world
NIL
CL-USER> (progn
(echo "hello")
(echo "world")
(values))
hello
world
; No value

另见:

关于sockets - 从 lisp 中的套接字流读取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28353464/

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