Julia 和 Groovy 之间使用套接字进行数据交换

data exchange using socket between Julia and Groovy

提问人:Flint_wasd 提问时间:9/10/2022 更新时间:9/10/2022 访问量:104

问:

最近,我正在尝试使用套接字在 Julia 中的求解器(作为服务器)和 Groovy 中的客户端之间交换数据。我对套接字概念和语言都很陌生。问题是,一旦 julia 服务器完成“readLine()”,套接字就会关闭并且“write()”无法继续。我无法向 Groovy 客户端发送消息,也无法交换数据。

服务器代码(Julia):

using Sockets

server = listen(2000)
while true
  conn = accept(server)
  println("connection accepted")
  @async begin
    try
        line = readlines(conn)
        println(line)
        str = "server"
        write(conn,str)
        println("write done")
        sleep(2)

        
    catch err
      print("connection ended with error $err")
      sleep(2)
    end
  end
end

客户端代码(Groovy):

class groovy_client {

    static void main(String[] args) {


        while (true) {
            try {
                dataTransfer()
                println 'dataTransfer success'
            }catch (e) {
                println(e)
                sleep(2000)
            }


        }




    }

    private static void dataTransfer() {
        Socket s = new Socket('localhost', 2000)
        println 'connect to the server'
        s.withStreams { input, output ->


            // BufferedReader reader = new BufferedReader(new InputStreamReader(input))
            // str = reader.readLine()
            // println(str)

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output))
            writer.write('Hi server')
            writer.flush()

            input.withReader{reader ->
                str = reader.readLine()
                println 'haha'
                println(str)

            // def reader = input.newReader()
            // def buffer = reader.readLine()
            // println "server: $buffer"
            sleep(2000)
            }
        println 'disconnect'
        }


    }
}

而且我也对插座的工作原理表示怀疑。服务器和客户端是否同时发送和接收消息?就像服务器告诉客户端将 1 加到 int_a,而客户端将int_a发送回发件人。int_a是保留原始值还是添加 1 并发送到服务器?

套接字 Groovy io Julia

评论

0赞 daggett 9/10/2022
第一个问题 - readLine 要求另一侧写新行符号。第二 - 更好地设计通信流程 - 例如客户端询问 - 服务器回复。
0赞 Flint_wasd 9/10/2022
嗨,daggett,谢谢你的回复。关于第一个问题,我已经让客户端写入缓冲区。但不知何故,程序似乎卡在了“readline”之前的某个时间点。关于第二个,你的意思是在每个连接上只做一件事吗?
0赞 daggett 9/10/2022
首先不是问题 - 这是代码中会阻碍通信的问题。
1赞 Flint_wasd 9/10/2022
是的,你是对的。我忘记了“\n”,所以 readLine() 一直阻止通信。

答: 暂无答案