scheme(gauche)でTCP通信してみる

しばらく前に試してみたことを今更公開。

schemeでtcp通信をやってみました。 gauche.netってやつを使ってることから分かるとおり、gauche専用です。

受信側

(use gauche.net)

(define (handler sock)
  (let ((recv (socket-recv sock 1024)))
    (if (<= (string-length recv) 0)
      (begin
        (display "exit\n")
        (socket-close sock)
        (exit)))
    (display "\"")(display recv)(display "\"")(newline)
    (socket-send sock recv))
  (handler sock))

(define (main args)
  (display "create socket...\n")
  (let ((server-sock (make-server-socket `inet 5000)))
    (display "accept start...\n")
    (let ((sock (socket-accept server-sock)))
      (display "recv start...\n")
      (handler sock))))

こんな感じ。 ただのエコーサーバーっすね。

送信側

(use gauche.net)

(define (input-line)
  (display ">> ")(flush)
  (let ((input (read-line)))
    (if (eof-object? input)
      (begin (newline)(exit))
      input)))

(define (main args)
  (let ((sock (make-client-socket `inet "127.0.0.1" 5000)))
    (let loop((input (input-line)))
      (socket-send sock input)
      (display (socket-recv sock 1024))(newline)
      (loop (input-line)))))

こんなもんで。

プロンプトっぽいのを出して、入力されたのをひたすら送信します。

こうやってみると、やっぱりpythonは手軽でいいな、とか思ってしまうよね。 かんすうこわい。