Question

J'ai un très petit programme qui ouvre un socket et accepte une connexion. Il saisit alors l'adresse IP distante et le port.

Je voudrais envoyer un message texte à l'ordinateur distant (telnet) et fermer la connexion.

Je ne peux pas déterminer quelle est la fonction pour envoyer un message au client telnet.

Le Clozure manuel énumère une fonction appelée « envoyer à » mais il dit qu'il est pour les sockets UDP et je travaille avec les sockets TCP.

J'espère que quelqu'un peut me dire ce que le bon fonctionnement est, ou, si « envoyer à » est le bon fonctionnement, comment l'utiliser correctement.

Merci

(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))
Était-ce utile?

La solution

La documentation du CCA:. Accept-CONNECTION dit qu'il retourne un flux

Vous pouvez utiliser les opérations d'E / S normales (par exemple: PRINC) de Common Lisp avec ce flux. Pour les opérations d'E / S voir les chapitres hyperspec sur « flux » et la « imprimante ».

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

Autres conseils

En SBCL (en utilisant usocket), utiliser la fonction SOCKET-STREAM pour renvoyer un flux Lisp, puis utilisez FORMAT, écrire et similaires à envoyer des choses à travers.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top