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 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