ClozureのCommon Lisp - TCPソケットプログラミング - 応答を送信
-
19-09-2019 - |
質問
私はソケットを開き、接続を受け入れる非常に小さなプログラムを持っています。その後、リモートIPとポートをつかみます。
私は、リモートコンピュータ(telnetの)にテキストメッセージを送信し、接続を終了したいと思います。
私はtelnetクライアントにメッセージを送信するためである機能を判断することはできません。
Clozureマニュアルには、「送信と呼ばれる機能を示していますしかし、それは言う「には、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は、ストリームを返すと言っている。
。あなたは、通常のI / O操作(例:のprinc)を使用することができますので、そのストリームでのCommon Lispのを。 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を使用して)で、私は、全体で物事を送信するために、FORMATを使用WRITEなど、その後、lispのストリームを返すためにSOCKET-STREAM機能を使用します。
所属していません StackOverflow