2011-05-28 18 views
7

Estoy tratando de aprender emacs elisp y tratando de escribir un pequeño programa para conectarme a un puerto TCP/IP y procesar los registros que regresan. En un caso voy a analizar datos CSV y en el otro, voy a analizar JSON (por ejemplo, de GPSD, y json.el afortunadamente viene con emacs). He mirado el ejemplo de echo-server, pero estoy buscando un ejemplo de cliente que muestre la conexión con make-network-process y los datos de línea de procesamiento. No es http, por lo que no puedo usar url-retrieve-synchronously.Ejemplos simples de clientes tcp en emacs elisp?

Mis habilidades de elisp son muy débiles, entonces estoy buscando ejemplos realmente básicos.

Gracias!

Respuesta

11

Estaba buscando algo mucho más simple. Finalmente logré codificarlo desde un ejemplo de TcpClient simplificado. Esto funciona desde la línea de comandos si lo guarda como client.el, haga chmod + x client.el y ./client.el. Imprimirá lo que el servidor decida enviar y lo abandone después de 300 segundos. Realmente necesita algunos comentarios para explicar lo que está pasando.

#!/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

El Emacs wiki es un gran lugar para buscar.

Ver TcpClient

+0

Gracias! Volví y leí el ejemplo de TcpClient nuevamente. Lo corté para crear la respuesta más simple a continuación. –

2

Si quieres algo más sólido y con el posible apoyo de cifrado por ejemplo, usted debe echar un vistazo a network-stream.el y proto-stream.el.