Clozure Common LISP -TCP 소켓 프로그래밍 - 답장 보내기
-
19-09-2019 - |
문제
소켓을 열고 연결을 수락하는 매우 작은 프로그램이 있습니다. 그런 다음 원격 IP와 포트를 잡습니다.
원격 컴퓨터 (Telnet)에 문자 메시지를 보내고 연결을 닫고 싶습니다.
텔넷 클라이언트에게 메시지를 보내는 기능을 결정할 수 없습니다.
그만큼 클로 조처 매뉴얼 "보내기"라는 함수를 나열하지만 UDP 소켓 용이며 TCP 소켓으로 작업하고 있습니다.
누군가가 적절한 기능이 무엇인지 말해 줄 수 있기를 바랍니다. 또는 "보내기"가 적절한 기능이라면 올바르게 사용하는 방법.
감사
(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))
해결책
CCL : accept-connection의 문서는 스트림을 반환한다고 말합니다.
따라서 해당 스트림과 함께 일반적인 LISP의 일반 I/O 작업 (예 : Princ)을 사용할 수 있습니다. I/O 작업은 '스트림'과 '프린터'의 Hyperspec 장을 참조하십시오.
(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)
다른 팁
SBCL (Usocket 사용)에서는 소켓 스트림 기능을 사용하여 LISP 스트림을 반환 한 다음 형식을 사용하고 쓰기 등을 사용하여 물건을 보냅니다.
제휴하지 않습니다 StackOverflow