2009-10-06 17 views
6

私はソケットを開き、接続を受け入れる非常に小さなプログラムを持っています。次に、リモートIPとポートを取得します。Clozure Common Lisp - TCPソケットプログラミング - 応答の送信

私は、リモートコンピュータ(telnetの)にテキストメッセージを送信し、接続を終了したいと思います。

どの機能がテルネットクライアントにメッセージを送信するための機能なのか判断できません。しかし、それはそれはUDPソケットのためだと言うと、私はTCPソケットで働いている「に送る」と呼ばれる

Clozure manualリスト機能。

私は誰かが適切な機能が何であるかを教え、または、「送信-に」あれば適切な機能で、どのようにそれを適切に使用することができると思います。 (usocketを使用して)

おかげでSBCLで

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

答えて

8

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) 
3

は、私は全体で物事を送信するために、FORMATを使用WRITEなど、その後、lispのストリームを返すためにSOCKET-STREAM機能を使用しています。

関連する問題