我想实现一个while循环,只要客户端连接到我的套接字就会运行。 这将是基于线程的,所以我想让一旦客户端断开连接线程关闭。
问题:如何检查客户端是否仍然连接到我的套接字?
问题:当连接关闭时,线程是否已经关闭,如果我像这样启动它:Thread.start(socket.accept)do | client | ...
答案 0 :(得分:2)
检查一下,
require 'socket'
th=[]
server = TCPServer.open(2000)
loop do
Thread.start(server.accept) do |client|
client.puts "server started.."
# Something
th = Thread.list
th.each do |t|
if t.status == "sleep" # checks all client status
f = t.kill # kills thread if client is disconnected
end
end
end
end
你可以杀死线程,或者你可以在一个数组中使用该线程存储客户端的IP地址,并与精确客户端进行比较。(比如,t.addr)
答案 1 :(得分:0)
我没有编程ruby的经验。如果它是.Net,没有某种保持活动协议,你假装的东西是不可能的。如果服务器在x秒后没有从客户端获取数据,则假定客户端已断开连接。客户端必须有一个计时器,以便在不通信时向服务器发送内容。
答案 2 :(得分:0)
server = TCPServer.open 12345
loop {
Thread.start(server.accept) do |client|
...
puts "client is offline!" if client.closed?
...
client.close
end
}
你可以查看“关闭?”在“客户”中。