如何在Julia中停止TCP服务器?

时间:2016-09-23 18:06:49

标签: tcp julia tcplistener

TCP示例

public static void appendToFile(File dir, String fileName) {
    try (FileWriter writer = new FileWriter(new File(dir, fileName), true)) {
        writer.write("Hello");
    } catch(IOException e) {
        e.printStackTrace();
    }
}

要关闭连接,您需要调用@async begin server = listen(2000) while true sock = accept(server) println("Hello World\n") end end 方法:

close

如何阻止听众?

close(sock)

1 个答案:

答案 0 :(得分:2)

不是继续评论,而是我认为你可能会尝试做的事情:

来自朱莉娅REPL:

julia> server = listen(2000)
Base.TCPServer(active)

julia> @async begin
         while true
           sock = accept(server)
           print(readstring(sock))
         end
       end

来自另一个终端:

~ $ nc localhost 2000
Hello from the other terminal
[Ctrl-D]   % i.e. signal end of file. this closes the connection

在julia repl中,您会在发送EOF信号后立即看到“来自其他终端的Hello”,否则julia提示将继续正常。如果从netcat终端重复此过程,您将再次看到REPL中打印的消息,因为套接字在while循环内不断重新激活。

理想情况下,如果您想关闭整个事情,首先要close(sock)然后close(server)。但是,您无法直接关闭套接字,因为它位于“while”循环中并且不断重新激活,并且您无法直接访问变量“sock”。

因此,您只能关闭服务器,完全可以预料到错误。 所以在try块中捕获它

编辑:对不起,我的错,异常与套接字有关,而不是服务器,所以你需要将那个包装在异步块内的try catch块中:

@async begin
     while true
       try
         sock = accept(server)
         print(readstring(sock))
       catch ex
         print("exiting while loop")
         break
       end 
     end
   end