因此,假设我有一个带有2个按钮的Tk界面。我希望其中之一启动服务器,而其中之一关闭服务器。 开始按钮的代码:
syslog "Server is Opened"
config
socket -server accept 12345
vwait forever
要停止该服务器,我必须在停止按钮中写些什么?还是应该在同一按钮中启动和停止服务器,以及如何进行?
答案 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
测试),但这只是主题的一种变体。