emacs - emacs elisp 中的简单 tcp 客户端示例?

标签 emacs elisp tcpclient

我正在尝试学习 emacs elisp 并尝试编写一个小程序来连接到 TCP/IP 端口并处理返回的记录。在一种情况下,我将解析 CSV 数据,而在另一种情况下,我将解析 JSON(例如来自 GPSD,幸好 json.el 随 emacs 一起提供)。我已经查看了 echo-server 示例,但我正在寻找一个客户端示例,该示例显示了与 make-network-process 的连接和处理面向行的数据。它不是 http,所以我不能使用 url-retrieve-synchronously。

我的elisp技能真的很弱,所以我正在寻找非常基本的例子。

谢谢!

最佳答案

我正在寻找更简单的东西。我终于设法从一个精简的 TcpClient 示例中对其进行编码。如果将其另存为 client.el、执行 chmod +x client.el 和 ./client.el,则可以从命令行执行此操作。它将打印出服务器决定发送的内容并在 300 秒后退出。它真的需要一些评论来解释它发生了什么。

#!/usr/bin/emacs --script

(defvar listen-port 9999
    "port of the server")

(defvar listen-host "127.0.0.1"
    "host of the server")

(defun listen-start nil
    "starts an emacs tcp client listener"
    (interactive)
    (make-network-process :name "listen" :buffer "*listen*" :family 'ipv4 :host listen-host :service listen-port :sentinel 'listen-sentinel :filter 'listen-filter))

(defun listen-stop nil
  "stop an emacs tcp listener"
  (interactive)
  (delete-process "listen"))

(defun listen-filter (proc string)   
  (message string))

(defun listen-sentinel (proc msg)
  (when (string= msg "connection broken by remote peer\n")
    (message (format "client %s has quit" proc))))

(listen-start)
(sleep-for 300)
(listen-stop)

关于emacs - emacs elisp 中的简单 tcp 客户端示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162967/

相关文章:

Android TCP连接最佳实践

c# - 连接到服务器超时或 try-catch? (C# 窗体)

emacs - 在新树下归档组织模式项目

C++ 编译窗口包含垃圾字符

emacs 自定义命令行参数

Emacs lisp - 在两个括号之间提取数字

emacs - elisp - 获取相对于脚本的文件路径

emacs - 如何在spacemacs中全局禁用js2-mode语法检查

Emacs Dired - C-x C-f 创建一个新文件给我现有文件的建议

c# - 如何设置 TcpClient 的超时时间?