客户端连接后退出等待循环

时间:2014-05-28 07:54:17

标签: sockets tcl

我试图在服务器脚本的TCL wiki中使用这个例子:

    # Initialise the state
after 5000 set state timeout
set server [socket -server accept 12345]
proc accept {args} {
    global state connectionInfo
    set state accepted
    set connectionInfo $args
}

# Wait for something to happen
vwait state

# Clean up events that could have happened
close $server
after cancel set state timeout

# Do something based on how the vwait finished...
switch $state {
    timeout {
        puts "no connection on port 12345"
    }
    accepted {
       puts "connection: $connectionInfo"
       puts [lindex $connectionInfo 0] "Hello there!"
    }
}

我希望在clinet打开一个套接字与服务器一次后,vwait循环将完成并继续运行,万一它失败我将有一个超时。所以很好。 由于某种原因问题开始,我得到$ state的错误,并且无法将其作为带脚本的函数运行。 我得到的错误是:无法读取“状态”:没有这样的变量。运行它不是一个功能正常工作,我不明白为什么。 任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

该代码有效,但仅在全局上下文中进行评估;我想你正试图在程序中运行它。发生的事情是switch调用查找局部变量state而不是全局变量state,但找不到它,而vwait总是使用全局变量并且after回调在全局范围内进行评估。

修复是替换

switch $state {

switch $::state {

假设您对使用该变量感到满意。