Skip to content

Instantly share code, notes, and snippets.

@noahlz
Created April 25, 2014 05:50
Show Gist options
  • Save noahlz/11278875 to your computer and use it in GitHub Desktop.
Save noahlz/11278875 to your computer and use it in GitHub Desktop.
Simple clojure server adapted from Clojure Cookbook that runs forever rather than exiting after reading the first line.
(ns hello.core
(:require [clojure.java.io :as io])
(:import [java.net ServerSocket]))
;; Server
(defn receive-msg [socket]
(.readLine (io/reader socket)))
(defn send-msg [socket msg]
(let [writer (io/writer socket)]
(.write writer msg)
(.flush writer)))
(defn server [port handler]
(println "Starting server on port" port "with handler" handler)
(with-open [server-sock (ServerSocket. port)]
(doseq [sock (repeatedly #(.accept server-sock))]
(with-open [sock sock]
(send-msg sock (str "Ready..." \newline))
(let [msg-in-seq (repeatedly #(receive-msg sock))
msg-out (partial handler)]
(doseq [line msg-in-seq
:while (seq line)]
(println "Recieved:" line)
(send-msg sock (msg-out line)))
(println "Disconnecting")
(send-msg sock (str "Bye!" \newline)))))))
(defn test-server [] (server 8888 #(str (.toUpperCase %) \newline)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment