2009-10-06 14 views
6

Tengo un programa muy pequeño que abre un socket y acepta una conexión. A continuación, toma la dirección IP y el puerto remotos.Clozure Common Lisp - Programación de socket TCP - Envío de una respuesta

Me gustaría enviar un mensaje de texto a la computadora remota (telnet) y cerrar la conexión.

No puedo determinar qué función es para enviar un mensaje al cliente de telnet.

El Clozure manual enumera una función llamada "enviar a" pero dice que es para sockets UDP y estoy trabajando con sockets TCP.

Espero que alguien pueda decirme cuál es la función correcta o, si la función adecuada es "enviar a", cómo usarla 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)) 

Respuesta

8

La documentación de CCL: ACCEPT-CONNECTION dice que devuelve una secuencia.

Para que pueda usar las operaciones de E/S normales (ejemplo: PRINC) de Common Lisp con esa secuencia. Para operaciones de E/S, vea los capítulos de HyperSpec en 'streams' y en 'printer'.

(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) 
3

En SBCL (utilizando usocket), que utilizan 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.