Domanda

Ho un programma molto piccolo che apre un socket e accetta una connessione. E poi afferra il IP remoto e la porta.

Mi piacerebbe inviare un messaggio di testo al computer remoto (telnet) e chiudere la connessione.

Non riesco a determinare quale funzione è per l'invio di un messaggio al client telnet.

Il Clozure manuale elenca una funzione chiamata "send a", ma si dice che è per socket UDP e sto lavorando con il socket TCP.

Spero che qualcuno mi può dire quale sia la funzione adeguata è, oppure, se "send-to" è la funzione corretta, come usarlo correttamente.

Grazie

(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))
È stato utile?

Soluzione

La documentazione del CCL:. Accept-CONNECTION dice che restituisce un flusso

Quindi, è possibile utilizzare le normali operazioni I / O (esempio: princ) di Common Lisp con quel flusso. Per operazioni di I / O vedere i capitoli HyperSpec su 'flussi' e la 'stampante'.

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

Altri suggerimenti

In SBCL (utilizzando usocket), io uso la funzione PRESA DI STREAM per restituire un flusso di Lisp, quindi utilizzare FORMAT, scrivere e simili per inviare le cose attraverso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top