我正在尝试实现一个小脚本,它将创建一个服务器,等待客户端连接,为客户端创建一个新线程,然后处理客户端请求。来自客户端的第一个请求将是HELO文本,服务器必须使用HELO文本,然后是IP地址,端口号和学生编号进行响应。我有点工作。
下一个请求将是任意随机字符串,并且不得返回任何内容。我有点工作。
最后一个请求是KILL_SERVICE请求,必须关闭服务器。我不知道该怎么做。另一个问题是我的程序一次只能使用一个命令。我不知道如何处理一个命令,然后等待来自客户端的下一个命令。我的服务器代码如下。任何帮助,将不胜感激。
require 'socket'
port = 8888
puts "Starting Up Server"
server = TCPServer.open(port)
while (client = server.accept)
Thread.start do
input = client.gets
if input.start_with?("HELO")
client.puts "#{input}IP:#{client.peeraddr[2]}\nPort:#{port}\nStudentID:[2]\n"
elsif input == "KILL_SERVICE\n"
client.puts "KILL"
else
puts input
end
end
end
答案 0 :(得分:0)
一旦代码离开Thread.start
块,该线程就被认为已完成。如果你想要它,你需要将它包裹在循环中:
while (client = server.accept)
Thread.start do
client_running = true
while (client_running)
# ... Your code
end
end
end
然后,如果这些命令中的任何一个应该停止线程,设置client_running = false
并且循环将退出。为了强制关闭整个过程,exit(0)
将结束整个过程。
更新:添加了关于如何处理关闭服务器本身的阻止,而不仅仅是连接。
答案 1 :(得分:0)
接受连接后,您需要继续等待来自客户端的输入。
while (client = server.accept)
Thread.start do
while input = client.gets
# process input
end
end
end
当您收到KILL_SERVICE
时,您需要使用client.close
关闭客户端,并使用while
突破break
循环。一旦你完成while
循环,处理该客户端的线程就会退出。