2011-05-28 20 views
7

我试图学习emacs elisp并试图编写一个小程序来连接到TCP/IP端口并处理返回的记录。在一个案例中,我将解析CSV数据,而在另一个案例中,我将解析JSON(例如,来自GPSD,并且json.el感谢emacs)。我查看了echo-server示例,但我正在寻找一个客户端示例,它显示了与make-network-process和处理面向行的数据的连接。它不是http,所以我不能同时使用url-retrieve。emacs elisp中的简单tcp客户端示例?

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

谢谢!

回答

11

我正在寻找更简单的东西。我终于设法从一个精简的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)
4

Emacs wiki是一个很好的看看。

TcpClient

+0

谢谢!我回去再读一遍TcpClient例子。我在下面创建了更简单的答案。 – 2011-06-01 11:25:15

2

如果你想要的东西更扎实,并可能支持的例如加密,你应该看看network-stream.elproto-stream.el