That seems to be right. I just tested it and that seem to fix the problem. 
I am confused about why Clojure appears to give the wrong line number? Is 
there often a difference between the line number Emacs gives and line 
number in the stack trace? 



On Tuesday, August 28, 2012 10:34:16 PM UTC-4, Mark Rathwell wrote:
>
> See [1].  
>
> Valid ServerSocket constructors:
>
> ServerSocket()
> ServerSocket(int)
> ServerSocket(int,int)
> ServerSocket(int,int,InetAddress)
>
> Your code is trying:
>
> ServerSocket(int,string)
>
> [1] 
> http://docs.oracle.com/javase/1.4.2/docs/api/java/net/ServerSocket.html
>
>
> On Tue, Aug 28, 2012 at 8:25 PM, larry google groups 
> <lawrenc...@gmail.com<javascript:>
> > wrote:
>
>> I apologize about the beginner questions. I am new to Clojure. 
>>
>> If I do this: 
>>
>> (defn run-server [port what-to-do]
>>   (let [server-socket (ServerSocket. port "localhost")]
>>     (while (not (. server-socket isClosed))
>>       (listen-and-respond server-socket what-to-do))))
>>
>> (defn -main [& args]
>>   (let [port (Integer/parseInt (first args))
>>         service (symbol (second args))]
>>     (println "Server is starting")
>>     (println "port: " port)
>>     (println  (second args))
>>     (println  (symbol (second args)))
>>     (println "service: " service)
>>     (run-server port service)))
>>
>> And on the command line I call it like: 
>>
>>  java -jar who-is-logged-in-1.0-standalone.jar 3456 "who-is-here-now"
>>
>> This prints out:
>>
>> Server is starting
>> port:  3456
>> who-is-here-now
>> who-is-here-now
>> service:  who-is-here-now
>>
>> but then I get this error: 
>>
>> Exception in thread "main" java.lang.ClassCastException: java.lang.String 
>> cannot be cast to java.lang.Number
>> at who_is_logged_in.core$run_server.invoke(core.clj:27)
>>
>> Line 27 is: 
>>
>> (defn run-server [port what-to-do]
>>
>> The only way I can read the error message is to think that the code is 
>> trying to assign the value of what-to-do to the (integer) "port". 
>>
>> What have I done wrong? 
>>
>>
>>
>>
>> On Tuesday, August 28, 2012 12:47:44 PM UTC-4, larry google groups wrote:
>>>
>>> >Command line arguments that are not strings need to be converted 
>>> > prior to use by your main function.  
>>>
>>> That makes sense, I need to cast it to a symbol, yes? I have a problem 
>>> with that though. At the REPL I tried something like this: 
>>>
>>> (def hey (resolve (symbol what-to-do)))
>>>
>>> which worked great at the REPL, but in my code I get "nil" returned from 
>>> resolve. If I do this: 
>>>
>>> (defn -main [& args]
>>>   (let [port (Integer/parseInt (first args))
>>>         service (resolve (symbol (second args)))]
>>>     (println "Server is starting")
>>>     (println "port: " port)
>>>     (println  (second args))
>>>     (println  (symbol (second args)))
>>>     (println "service: " service)
>>>     (run-server port service)))
>>>
>>> And call it like this:
>>>
>>> java -jar who-is-logged-in-1.0.0-**SNAPSHOT-standalone.jar 3456 
>>> "who-is-here-now"
>>>
>>> Everything looks correct till the final line when I get "nil": 
>>>
>>> Server is starting
>>> port:  3456
>>> who-is-here-now
>>> who-is-here-now
>>> service:  nil
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Tuesday, August 28, 2012 6:53:24 AM UTC-4, Jon_Boone wrote:
>>>>
>>>> Command line arguments that are not strings need to be converted prior 
>>>> to use by your main function.  
>>>>
>>>> Look at the code for the port number and do the same for the service. 
>>>>
>>>> --jon
>>>>
>>>>
>>>> On Aug 28, 2012, at 2:42, larry google groups <lawrenc...@gmail.com> 
>>>> wrote:
>>>>
>>>>
>>>> So, this started when I read Keith Swallow's article on a simple web 
>>>> server:
>>>>
>>>> http://keithcelt.com/a-simple-**web-server-in-clojure<http://keithcelt.com/a-simple-web-server-in-clojure>
>>>>
>>>> I took his code and ran "lein new" to create a new project and I copy 
>>>> and pasted his code to core.clj and made some minor adjustments, adding 
>>>> gen-class and main so I could run this from the command line. My main 
>>>> function looked like this: 
>>>>
>>>> (defn -main [& args]
>>>>   (let [port (Integer/parseInt (first args))]
>>>>     (println "Server is starting")
>>>>     (run-server port echo)))
>>>>
>>>> Which called his function: 
>>>>
>>>> (defn run-server [port service]
>>>>   (let [server-socket (create-socket port)]
>>>>     (while (not (. server-socket isClosed)) 
>>>>
>>>>       (listen-and-respond server-socket service)))) 
>>>>
>>>> I compiled that and ran "lein uberjar" and then ran it from the command 
>>>> line and it worked great. 
>>>>
>>>> Then, to make it slightly more flexible, I wanted to hand in the name 
>>>> of the service from the command line. So I made a minor change: 
>>>>
>>>>
>>>> (defn run-server [port what-to-do]
>>>>   (let [server-socket (ServerSocket. "localhost" port)]
>>>>     (while (not (. server-socket isClosed))
>>>>       (listen-and-respond server-socket what-to-do))))
>>>>
>>>> (defn -main [& args]
>>>>   (let [port (Integer/parseInt (first args))
>>>>         service (second args)]
>>>>     (println "Server is starting")
>>>>     (println "port: " port)
>>>>     (println "service: " service)
>>>>     (run-server port service)))
>>>>
>>>> I compiled this and ran it. And now this line: 
>>>>
>>>> (defn run-server [port what-to-do]
>>>>
>>>> Gets this error: 
>>>>
>>>> Exception in thread "main" java.lang.ClassCastException: 
>>>> java.lang.String cannot be cast to java.lang.Number
>>>> at who_is_logged_in.core$run_**server.invoke(core.clj:27)
>>>>
>>>> I'm calling it from the command line with: 
>>>>
>>>> java -jar who-is-logged-in-1.0.0-**SNAPSHOT-standalone.jar 3456 
>>>> who-is-here-now
>>>>
>>>> I also tried putting the service name in quotes: 
>>>>
>>>> java -jar who-is-logged-in-1.0.0-**SNAPSHOT-standalone.jar 3456 
>>>> "who-is-here-now"
>>>>
>>>> Can anyone tell me what is wrong? Why does Clojure think I'm trying to 
>>>> cast "who-is-here-now" to a number? 
>>>>
>>>>
>>>>
>>>>  -- 
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clo...@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+u...@googlegroups.com
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en>
>>>>
>>>>  -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com<javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> 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 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

Reply via email to