Pergunta

Eu tenho um programa muito pequeno que abre um socket e aceita uma conexão. Ele então pega o IP remoto e a porta.

Eu gostaria de enviar uma mensagem de texto para o computador remoto (telnet) e fechar a conexão.

Eu não posso determinar qual função é para enviar uma mensagem para o cliente telnet.

Clozure listas manuais uma função chamada "send a", mas diz que é para sockets UDP e eu estou trabalhando com sockets TCP.

Espero que alguém pode me dizer o que a função adequada é, ou, se "send-to" é a função adequada, como usá-lo corretamente.

Graças

(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))
Foi útil?

Solução

A documentação do CCL:. ACEITA-CONNECTION diz que ele retorna um fluxo

Assim, você pode usar as operações de E / S normais (exemplo: PRINC) de Common Lisp com esse fluxo. Para I / O operações consulte os capítulos HyperSpec sobre 'correntes' e a 'impressão'.

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

Outras dicas

Em SBCL (usando usocket), eu uso a função SOCKET-STREAM para retornar um fluxo lisp, em seguida, usar o formato, escrever e afins para enviar as coisas do outro lado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top