Clozure Common Lisp - Socket TCP Programación - enviar una respuesta
-
19-09-2019 - |
Pregunta
Tengo un pequeño programa que abre un socket y acepta una conexión. Es entonces agarra la IP remota y el puerto.
Me gustaría enviar un mensaje de texto con el equipo remoto (telnet) y cerrar la conexión.
No puedo determinar cual es la función para enviar un mensaje al cliente telnet.
El href="http://ccl.clozure.com/manual/chapter7.2.html#Sockets-Dictionary" rel="nofollow noreferrer"> Clozure manual de enumera una función llamada "enviar a", pero dice que es para sockets UDP y estoy trabajando con sockets TCP.
Espero que alguien me puede decir cuál es la función adecuada es, o, si "enviar a" es la función adecuada, cómo usarlo correctamente.
Gracias
(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))
Solución
La documentación de CCL:. Accept-CONEXIÓN dice que devuelve una secuencia
Así que usted puede utilizar las E / S de las operaciones normales (ejemplo: PRINC) de Common Lisp con esa corriente. Para que las operaciones de E / S ver los capítulos sobre hyperspec 'corrientes' y la 'impresora'.
(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)
Otros consejos
En SBCL (usando usocket), utilizo la función TOMA DE CORRIENTE para devolver una secuencia Lisp, a continuación, utilizar el formato, escribir y similares, para enviar las cosas a través.