Хобрук: Ваш путь к мастерству в программировании

Clozure Common Lisp — Программирование сокетов TCP — Отправка ответа

У меня есть очень маленькая программа, которая открывает сокет и принимает соединение. Затем он захватывает удаленный IP-адрес и порт.

Я хочу отправить текстовое сообщение на удаленный компьютер (telnet) и закрыть соединение.

Я не могу определить, какая функция предназначена для отправки сообщения клиенту telnet.

В руководстве по Clozure указана функция "отправить", но он говорит, что это для сокетов UDP, и я работаю с сокетами TCP.

Я надеюсь, что кто-нибудь может сказать мне, что такое правильная функция, или, если «отправить» — правильная функция, как ее правильно использовать.

Спасибо

(setq my-socket (ccl:make-socket :connect :passive :format :text
        :local-port 20000 :reuse-address t))

(setq connection (ccl:accept-connection my-socket))

(setq remote-host (ccl:remote-host connection))

(setq remote-port (ccl:remote-port connection))
06.10.2009

Ответы:


1

В документации CCL:ACCEPT-CONNECTION сказано, что он возвращает поток.

Таким образом, вы можете использовать обычные операции ввода-вывода (например: PRINC) Common Lisp с этим потоком. Для операций ввода-вывода см. главы HyperSpec о «потоках» и «принтере».

(defun st (port)
  (ccl:with-open-socket (socket :connect :passive
                                :format :text
                                :local-port port
                                :reuse-address t)
    (with-open-stream (stream (ccl:accept-connection socket))
      (princ "CCL example response" stream))))

; example call
(st 20000)
06.10.2009

2

В SBCL (используя usocket) я использую функцию SOCKET-STREAM для возврата потока lisp, затем использую FORMAT, WRITE и тому подобное для отправки вещей.

06.10.2009
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..