【问题标题】:How to interact with a Swank server at a low level with telnet?如何使用 telnet 在低级别与 Swank 服务器交互?
【发布时间】:2019-12-05 09:34:18
【问题描述】:

我正在尝试从命令行使用 Swank 服务器(没有特定的生产目的,只是想通过一些 hacky 想法来理解事物以备后用),但我无法弄清楚我可以从telnet 获取任何可用答案的会话;例如我如何评估(+ 1 1)

previous question 告诉:

如果您熟悉 swank 协议,确实可以与 swank 服务器通信,该协议似乎没有被充分记录(参见例如:https://github.com/astine/swank-client/blob/master/swank-description.markdown)。但是,这会通过网络公开 TCP 套接字,这可能是不安全的。有一次我也尝试过,但我对 IPC 速度不满意。

该链接实际上给出了一些提示,但不幸的是没有示例。我没有得到任何结果。

这是我尝试过的;在单独启动服务器后

(swank:create-server :port 4005  :dont-close t :style NIL)

我尝试过这样的事情:

~ $ telnet localhost:4005
00001e(swank:listener-eval (+ 1 2))

并收到以下错误消息:

" "Reader error in file #<string-input stream from \"(swan...\" 0x6045ce0640>, position 20:
Cannot find the external symbol LISTENER-EVAL in #<\"SWANK\" package>.")Connection closed by foreign host

在这种情况下我应该输入什么字符串?

【问题讨论】:

  • swank-repl:listener-eval 怎么样?
  • 嗨@RainerJoswig 如果我没记错的话,我一输入就会得到答案Connection closed by foreign host

标签: lisp common-lisp read-eval-print-loop swank


【解决方案1】:

我设法完成了这项工作:

00003e(:emacs-rex (swank:interactive-eval "(+ 1 2)") "cl-user" t 8)

注意首先有一个:emacs-rex 关键字,以及要评估的表单是如何在字符串中的。 8 在这里只是一个任意值。回复首先以00A1C8(:indentation-update ...)开头,然后是:

000031(:return (:ok "=> 3 (2 bits, #x3, #o3, #b11)") 8)

【讨论】:

    猜你喜欢
    • 2016-12-31
    • 2014-01-14
    • 2011-08-10
    • 2011-09-17
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多