Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Clojure中的Socket编程_Java_Sockets_Clojure - Fatal编程技术网

Java Clojure中的Socket编程

Java Clojure中的Socket编程,java,sockets,clojure,Java,Sockets,Clojure,我是Clojure noob,请容忍我。我正在尝试编写一个简单的程序,通过套接字发送命令并获得响应。我的代码是: (def IPaddress "10.71.18.81") (def port 1500) (def socket (new Socket IPaddress port)) (print (clojure.string/join ["\nConnected to HSM: " (. socket isConnected)])) (def in (DataInputStream. (

我是Clojure noob,请容忍我。我正在尝试编写一个简单的程序,通过套接字发送命令并获得响应。我的代码是:

(def IPaddress "10.71.18.81")
(def port 1500)

(def socket (new Socket IPaddress port))
(print (clojure.string/join ["\nConnected to HSM: " (. socket isConnected)]))
(def in (DataInputStream. (BufferedInputStream. (. socket getInputStream))))
(def out (DataOutputStream. (BufferedOutputStream. (. socket getOutputStream))))
(def command "Some string")
(. out WriteUTF command)
(def response (. in readUTF))
(print (clojure.string/join ["Output from HSM: " response]))
错误为“线程中的异常”main“java.lang.IllegalArgumentException:无匹配方法:writeUTF”。我在理解Java互操作、访问对象方法等方面遇到困难。请提前感谢

编辑:如果有人感兴趣,我的最终工作代码包括在这里:

(def IPaddress "10.71.18.81")
(def port 1500)

(def socket (Socket. IPaddress port))
(println "Connected:" (.isConnected socket))
(def in (DataInputStream. (BufferedInputStream. (.getInputStream socket))))
(def out (DataOutputStream. (BufferedOutputStream. (.getOutputStream socket))))
(def command "Some string")
(println "Input:" command)
(.writeUTF out command)
(.flush out)
(def response (.readUTF in))
(println "Output: " response)

Java是区分大小写的,所以它应该是
(.out writeUTF命令)
。请注意,interop的首选语法是
(.writeUTF out命令)
,它相当于您的语句

我意识到这很古老,但它是我发现的使用clojure读取和写入套接字的唯一示例之一。我需要进行一些试验,以使您的代码正常工作,这样可能会有助于其他人了解这项工作的结果:

(import (java.net Socket))
(import (java.io DataInputStream DataOutputStream))

(def IPaddress "127.0.0.1")
(def port 1500)
(def command "Some string\n")
(def socket (Socket. IPaddress port))

(def in (DataInputStream. (.getInputStream socket)))
(def out (DataOutputStream. (.getOutputStream socket)))

(println "Input:" command)
(.writeUTF out command)

(def response (.readLine in))
(println "Output: " response)

非常感谢你。还有一些其他的小错误已经被修复,我已经对其进行了编辑,使其更符合Clojure的习惯