我想实现一个 while 循环,只要客户端连接到我的套接字就运行。这将是基于线程的,所以我想确保一旦客户端断开连接,线程就会关闭。
问题:如何检查客户端是否仍然连接到我的套接字?
问题:如果我像这样启动它,当连接关闭时线程是否已经关闭: Thread.start(socket.accept) do |client| ...
我想实现一个 while 循环,只要客户端连接到我的套接字就运行。这将是基于线程的,所以我想确保一旦客户端断开连接,线程就会关闭。
问题:如何检查客户端是否仍然连接到我的套接字?
问题:如果我像这样启动它,当连接关闭时线程是否已经关闭: Thread.start(socket.accept) do |client| ...
看一下这个,
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 地址存储在数组中,并与确切客户端的 IP 地址进行比较。(如 t.addr)
server = TCPServer.open 12345
loop {
Thread.start(server.accept) do |client|
...
puts "client is offline!" if client.closed?
...
client.close
end
}
你可以检查“关闭?” 在“客户”中。
我没有编程红宝石的经验。如果它是 .Net,那么如果没有某种保活协议,你所假装的事情是不可能的。如果服务器在 x 秒后没有从客户端获取数据,则假定客户端已断开连接。客户端必须有一个计时器,以便在不通信时向服务器发送一些东西。