Skip to content

Instantly share code, notes, and snippets.

@pbalduino
Last active December 16, 2015 16:40
Show Gist options
  • Save pbalduino/5464822 to your computer and use it in GitHub Desktop.
Save pbalduino/5464822 to your computer and use it in GitHub Desktop.
Servidor TCP básico. Permite várias conexões simultâneas, mas os usuários não se conversam.
(ns server.core)
(import [java.net ServerSocket])
(import [java.io DataInputStream
DataOutputStream])
(defn- debug [message]
(println (str "[" (.getName (Thread/currentThread)) "] " message)))
(defn- start-server
([fun]
(println "Using default settings")
(start-server fun 9876))
([fun port]
(println (str "Listening port " port))
(do
(println "Starting connection")
(let [server (ServerSocket. port)]
(loop [socket (.accept server)]
(.start
(Thread. #(fun socket)))
(recur (.accept server)))))))
(defn- callback [socket]
(let [in (DataInputStream. (.getInputStream socket))
out (DataOutputStream. (.getOutputStream socket))]
(debug "connected")
(.writeBytes out "\nHello stranger. Type exit to leave and press ENTER\n\n$ ")
(loop [user-input (.readLine in)]
(when-not (= "exit" user-input)
(do (debug user-input))
(.writeBytes out (str "Read: " user-input "\n\n$ "))
(recur (.readLine in))))
(.writeBytes out "\nGoodbye stranger.\n\n")
(.close socket)
(debug "left")))
(defn -main []
(start-server callback))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment