启动和停止服务器

时间:2018-06-20 08:15:11

标签: server tcl tk

因此,假设我有一个带有2个按钮的Tk界面。我希望其中之一启动服务器,而其中之一关闭服务器。 开始按钮的代码:

syslog "Server is Opened"
config

socket -server accept 12345 
vwait forever

要停止该服务器,我必须在停止按钮中写些什么?还是应该在同一按钮中启动和停止服务器,以及如何进行?

1 个答案:

答案 0 :(得分:1)

要关闭服务器套接字,您需要保持其句柄不变,并在不再需要它时close

syslog "Server is Opened"
config

set number_of_connected_clients 0
set server [socket -server accept 12345]
vwait until_time_to_stop
close $server

# You probably want some extra time/code here to let clients disconnect gracefully
while {$number_of_connected_clients > 0} {
    vwait number_of_connected_clients
}
exit

然后您可以通过执行以下操作(在回调中)来触发关闭操作:

set ::until_time_to_stop "now, please"

将变量设置为的实际值非常任意。棘手的部分是,您通常希望让任何关联的客户端完成其业务。要使上面的代码起作用,只需在客户端连接时增加全局number_of_connected_clients(可能在accept过程中),然后在关闭客户端连接端时再次减小全局vwait。还有其他方法可以达到相同的效果(例如,通过将客户端句柄保留在全局数组中,并在最后[array size handles]进行Product Type+Product Number Tag测试),但这只是主题的一种变体。