gpt4 book ai didi

sockets - 如何使用 usocket 创建连接? (普通口齿不清)

转载 作者:行者123 更新时间:2023-12-02 01:33:24 24 4
gpt4 key购买 nike

我正在尝试使用 lisp 中的套接字来创建连接。使用 sbcl,我发现“usocket”可用。但是我未能在服务器和客户端之间发送字符串。这是代码:

服务器:

(ql:quickload "usocket")
(use-package 'usocket)
(defun default-tcp-handler (stream) ; null
(declare (type stream stream))
(terpri stream))
(defparameter *us* (socket-server "127.0.0.1" 4547 #'default-tcp-handler))
(defparameter *s* (socket-accept *us*))
(defparameter *ss* (usocket:socket-stream *s*))

客户:

(ql:quickload "usocket")
(use-package 'usocket)
(defparameter *us* (socket-connect "127.0.0.1" 4547))
(defparameter *st* (usocket:socket-stream *us*))

我先运行服务器代码,它卡住了。然后我运行客户端代码。但是服务器好像没有反应。我尝试将字符串格式化为 st 流:

(format *st* "hello, server")

但它返回零。

我该如何解决这个问题??非常感谢。

最佳答案

我试过你的代码,没有错误,所以连接似乎一切正常。但是,如果您只写入流而不读取(更不用说刷新输出),则连接无法自行显示。这是一个修改后的版本,服务器从套接字中读取一行:

;;; server
(ql:quickload "usocket")
(use-package :usocket)
(defun default-tcp-handler (stream)
(declare (type stream stream))
(format t "~A~%" (read-line stream))
(finish-output))
(defparameter *us* (socket-server "127.0.0.1" 4547 #'default-tcp-handler))

;;; client
(ql:quickload "usocket")
(use-package :usocket)
(defparameter *us* (socket-connect "127.0.0.1" 4547))
(defparameter *st* (socket-stream *us*))
(write-line "hello server" *st*)
(finish-output *st*)

在您的例子中,format 返回了 nil,因为除了 format nil 之外,它总是返回 nil。服务器挂起,因为它开始监听。如果您不想这样,则必须使用多个线程。

关于sockets - 如何使用 usocket 创建连接? (普通口齿不清),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32796877/

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