gpt4 book ai didi

Lisp 中的套接字

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

我正在尝试使用 TCP/IP 套接字(在 Linux 系统中使用 sbcl 和 usocket 库)从 Lisp 脚本与另一个程序进行通信。通过一些在线资源,我设法整理了以下简单代码:

(require 'asdf)
(require 'usocket)

(defun start-client (message)
"Connects to server."
(usocket:with-client-socket (socket stream "0.0.0.0" 30000)
(format stream message)
(force-output stream)))

(start-client "Hello!~%")

这段代码让我发送一条消息,(我已经测试过它并且它有效)。我的问题是我需要将此代码拆分为两个不同的功能,一个用于打开套接字连接,另一个用于在不同时间发送不同的消息。我还需要添加一个额外的功能来接收来自其他程序的消息。然而,由于我对 Lisp 很陌生,所以我没有这样做。

最佳答案

最好的方法(我认为)是让你的整个脚本在 with-client-socket 的范围内。 .您可能有类似 main 的内容适合的功能。这避免了资源泄漏。您可能希望使用动态变量来避免通过函数参数手动将套接字流传递到需要的地方。

否则,您必须自己管理套接字的关闭。任何可能导致程序终止的调用路径都需要受到一些 unwind-protect 的保护。使用 usocket:socket-close 关闭套接字.为此,您使用 usocket:socket-connect 打开套接字使用与 usocket:with-client-socket 相同的参数. (您可以查看 usocket:with-client-socketusocket:with-connected-socket 的来源,以了解正在发生的交互。)

为了能够写入套接字流(可通过 (usocket:socket-stream socket) 获得)并关闭套接字,您需要在某处记住它,例如。 G。通过绑定(bind)动态变量。

关于Lisp 中的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136247/

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