문제

소켓을 열고 연결을 수락하는 매우 작은 프로그램이 있습니다. 그런 다음 원격 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 스트림을 반환 한 다음 형식을 사용하고 쓰기 등을 사용하여 물건을 보냅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top