Sockets 朱莉娅TCP选择
我有一个TCP连接问题 我制作了如下服务器:Sockets 朱莉娅TCP选择,sockets,julia,Sockets,Julia,我有一个TCP连接问题 我制作了如下服务器: server = listen(5000) sock = accept(server) while isopen(sock) yes=read(sock,Float64,2) println(yes) end 我希望它在无需读取的情况下继续打印[0.0,0.0],否则它将打印从服务器读取的内容。 若并没有可读取的内容或它崩溃,这将转到循环(尝试读取某些内容)。 我尝试通过以下任务来完成此任务: begin
server = listen(5000)
sock = accept(server)
while isopen(sock)
yes=read(sock,Float64,2)
println(yes)
end
我希望它在无需读取的情况下继续打印[0.0,0.0],否则它将打印从服务器读取的内容。
若并没有可读取的内容或它崩溃,这将转到循环(尝试读取某些内容)。
我尝试通过以下任务来完成此任务:
begin
server = listen(5000)
while true
sock = accept(server)
while isopen(sock)
yes=read(sock,Float64,2)
println(yes)
end
println([0.0,0.0])
end
end
但这只会打印它读到的内容。我正在与其他控制台建立连接并通过控制台:
clientside=connect(5000)
write(clientside,[2.0,2.0])
所以我试着让服务器打印[0.0,0.0],若并没有要读取的内容,它会在有要读取的内容时打印它所读取的内容。
有什么好主意吗?也许,让服务器异步运行
accept/print
块是一种策略(因为accept
调用会阻塞主线程)
在本教程之后,创建服务器的一种方法是:
notwaiting = true
server = listen(5000)
while true
if notwaiting
notwaiting = false
# Runs accept async (does not block the main thread)
@async begin
sock = accept(server)
ret = read(sock, Float64, 2)
println(ret)
global notwaiting = true
end
end
println([0.0, 0.0])
sleep(1) # slow down the loop
end
变量notwaiting
使async
块在每个连接中只运行一次(没有它,服务器运行一种“竞争条件”)
通过对客户端程序的两次调用对其进行测试,将产生以下输出:
C:\research\stackoverflow\EN-US>julia s.jl
[0.0,0.0]
[0.0,0.0]
[0.0,0.0]
[0.0,0.0]
[2.0,2.0]
[0.0,0.0]
[0.0,0.0]
[0.0,0.0]
[2.0,2.0]
[0.0,0.0]
[0.0,0.0]
[0.0,0.0]
用Julia版本0.5.0-rc3+0测试你是说TCP,对吗?不是TPC?花了我一段时间。哦!是的,我错了。这很好。一个问题仍然是,你只能发送一行与此。我尝试在循环写入连接时(如果可以的话),但侦听服务器只读取第一行。我也可以用这个,这是我想要的。谢谢