Короткий рецепт отправки содержимого текущего буфера по TCP. Отправляет весь текст буфера, затем открывает отдельный фрейм в нижней половине экрана, куда возвращает результат. Бинарные данные гонять не особо будет удобно, а вот для тестирования текстовых протоколов вроде HTTP самое оно. За основу взял примеры кода с EmacsWiki. Мне эта функция понадобилась для отправки запросов на сайт и просмотра результатов вместе с HTTP-заголовками, обернул её только для интерактивного вызова. Получился простой такой редактор HTTP, а больше и не требовалось.
https://gist.github.com/grafov/3730213
(defun tcp-send (server port &optional timeout)
"Отправить текст текущего буфера на server:port"
(if (not timeout) (setq timeout 60))
(let* ((res "*TCP/Result*")
(cur-buf (buffer-name))
(proc (open-network-stream "TcpRequest"
(progn (switch-to-buffer (get-buffer-create res))
(erase-buffer)
(switch-to-buffer cur-buf) res)
server port)))
(process-send-string proc (buffer-string))
(while (equal (process-status proc) 'open)
(when (not (accept-process-output proc timeout))
(delete-process proc)
(error "Network timeout.")))
(switch-to-buffer res)
(beginning-of-buffer)
(split-window)
(switch-to-buffer cur-buf)))
Если нужен полноценный tcp-клиент, то вот тут есть: http://www.emacswiki.org/emacs/tcp-client.el/
UPDATED В более завершённом для тестирования HTTP виде для Emacs нашелся такой код: https://github.com/hassy/http-twiddle/.
(defun tcp-send (server port &optional timeout)
"Отправить текст текущего буфера на server:port"
(if (not timeout) (setq timeout 60))
(let* ((res "*TCP/Result*")
(cur-buf (buffer-name))
(proc (open-network-stream "TcpRequest"
(progn (switch-to-buffer (get-buffer-create res))
(erase-buffer)
(switch-to-buffer cur-buf) res)
server port)))
(process-send-string proc (buffer-string))
(while (equal (process-status proc) 'open)
(when (not (accept-process-output proc timeout))
(delete-process proc)
(error "Network timeout.")))
(switch-to-buffer res)
(beginning-of-buffer)
(split-window)
(switch-to-buffer cur-buf)))