问题
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 properly.
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))
回答1:
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)
回答2:
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.
来源:https://stackoverflow.com/questions/1524912/clozure-common-lisp-tcp-socket-programming-sending-a-reply