Silly error -- I neglected to bind DataInputStream to the socket's input
stream, i.e. (let [reader (DataInputStream. (.getInputStream socket))] ... )


On Thu, May 22, 2014 at 9:08 PM, Dylan Gleason <dgleason8...@gmail.com>wrote:

> I am working with the TCP server example from the *Clojure Cookbook* to
> create an echo server. I am trying to modify it so that the receive
> function uses a DataInputStream and reads the incoming request as a byte
> array. However, I am having difficulty getting it to work. Here is what I
> have so far:
>
> (defn receive
>   [socket]
>   (with-open [reader (DataInputStream. socket)]
>     (let [bytes-in (byte-array 146)]
>       (.read reader bytes-in)
>       (println "Made it here")))
>
>
> (comment - This receive function works, the above doesn't
>
> (defn receive
>   [socket]
>   (let [r (.readLine (clojure.java.io/reader socket))]
>     (println r)))
> )
>
> (defn run
>   [port]
>   (let [running (atom true)]
>     (future
>       (with-open [socket (ServerSocket. port)]
>         (while @running
>           (with-open [sock (.accept socket)]
>             (receive sock)))))
>     running))
>
> Executing the run function on the REPL:
>
> > (tcp.server/run 8888)
>
> Then, when I try to send a request via my TCP client, it results in a
> SocketException:
>
> > (tcp.client/run :sync 1 10)
>
> Transmitting message
> -------------------------------
> Message Size : 93 bytes
> Host IP      : 127.0.0.1
> Host Port    : 8888
>
> Transmitting message
> -------------------------------
> Message Size : 93 bytes
> Host IP      : 127.0.0.1
> Host Port    : 8888
>
> SocketException Broken pipe  java.net.SocketOutputStream.socketWrite0
> (SocketOutputStream.java:-2)
>
> It appears that I am able to send two of the ten requests before a Broken
> pipe occurs, and on the server side it doesn't ever appear to make it to
> the receive function, as the println statement doesn't show any output. I
> know the client works, as I have tested it with my instructor's server, so
> it definitely appears to be a problem with the server.
>
> If anyone has any insight, please share.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "Clojure" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/clojure/Jl5tED_hgIc/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to