开发者

Clozure Common Lisp - TCP Socket Programming - Sending a Reply

开发者 https://www.devze.com 2022-12-08 00:03 出处:网络
I have a very small program which opens a socket and accepts a connection. It then grabs the remote IP and port.

I have a very small program which opens a socket and accepts a connection. It then grabs the remote IP and port.

I'd like to send a text message to the remote computer (telnet) and close the connection.

I can't determine which function is for sending a message to the telnet client.

The Clozure manual lists a function called "send to" but it says it's for UDP sockets and I'm working with TCP sockets.

I hope someone can tell me what the proper function is, or, if "send-to" is the proper function, how to use it proper开发者_开发百科ly.

Thanks

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


The documentation of CCL:ACCEPT-CONNECTION says that it returns a stream.

So you can use the normal I/O operations (example: PRINC) of Common Lisp with that stream. For I/O operations see the HyperSpec chapters on 'streams' and the '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)


In SBCL (using usocket), I use the SOCKET-STREAM function to return a lisp stream, then use FORMAT, WRITE and the like to send things across.

0

精彩评论

暂无评论...
验证码 换一张
取 消