6

ソケットを開いて接続を受け入れる非常に小さなプログラムがあります。次に、リモート IP とポートを取得します。

テキスト メッセージをリモート コンピューター (telnet) に送信し、接続を閉じたいです。

どの関数が telnet クライアントにメッセージを送信するためのものか判断できません。

Clozureのマニュアルには「send to」という関数がリストされていますが、それは UDP ソケット用であり、私は TCP ソケットで作業していると書かれています。

適切な機能とは何か、または「send-to」が適切な機能である場合は、それを適切に使用する方法を誰かが教えてくれることを願っています.

ありがとう

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

2 に答える 2

8

CCL:ACCEPT-CONNECTION のドキュメントには、ストリームを返すと記載されています。

そのため、Common 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)
于 2009-10-06T15:44:23.433 に答える
4

SBCL (usocket を使用) では、SOCKET-STREAM 関数を使用して Lisp ストリームを返し、次に FORMAT、WRITE などを使用して送信します。

于 2009-10-06T11:05:27.190 に答える