Skip to content

Instantly share code, notes, and snippets.

@pbalduino
Created May 23, 2016 18:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pbalduino/1ed5d477cd290836804b38f03163d101 to your computer and use it in GitHub Desktop.
Save pbalduino/1ed5d477cd290836804b38f03163d101 to your computer and use it in GitHub Desktop.
A small test with UDP
(ns udptest.core
(:import [java.net DatagramSocket
DatagramPacket
InetAddress]
[java.io BufferedReader
InputStreamReader]))
(set! *warn-on-reflection* true)
(defn- client []
(println "[CLIENT] Starting")
(let [inFromUser (BufferedReader. (InputStreamReader. System/in))
clientSocket (DatagramSocket.)
IPAddress (InetAddress/getByName "localhost")
sendData (byte-array 1024)
receiveData (byte-array 1024)
sentence (.readLine inFromUser)
sendData (.getBytes sentence)
sendPacket (DatagramPacket. sendData (alength sendData) IPAddress 9876)
_ (.send clientSocket sendPacket)
receivePacket (DatagramPacket. receiveData (alength receiveData))
_ (.receive clientSocket receivePacket)
modifiedSentence (String. (.getData receivePacket))
_ (println "FROM SERVER:" modifiedSentence)]
(.close clientSocket)))
(defn- server []
(println "[SERVER] Starting")
(let [serverSocket (DatagramSocket. 9876)
receiveData (byte-array 1024)
sendData (byte-array 1024)]
(loop [receiveData receiveData
sendData sendData]
(let [receivePacket (DatagramPacket. receiveData (alength receiveData))
_ (.receive serverSocket receivePacket)
sentence (String. (.getData receivePacket))
_ (println "[SERVER] RECEIVED:" sentence)
IPAddress (.getAddress receivePacket)
port (.getPort receivePacket)
capitalizedSentence (.toUpperCase sentence)
sendData (bytes (.getBytes capitalizedSentence))
sendPacket (DatagramPacket. sendData (alength sendData) IPAddress port)]
(.send serverSocket sendPacket)
(recur (bytes receiveData) (bytes sendData))))))
(defn -main[& args]
(.start (Thread. ^Runnable server))
(.start (Thread. ^Runnable client)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment