我是TCL的新手,正在尝试一本名为《实用编程》的书中的一个例子。
我正在尝试连接到具有同一文件中的客户端的echo服务器。因此,我制作了一个名为EchoServer.tclsh的文件。然后,我在其中编写了echo服务器代码和echoclient代码。当我运行这个时,我收到一个错误,显示:
couldn't open socket: connection refused
while executing
"socket $host $port"
(procedure "Echo_Client" line 2)
invoked from within
"Echo_Client localhost 2540"
invoked from within
"set s [Echo_Client localhost 2540]"
(file "echo_server.tcl" line 35)
服务器的代码是:
proc Echo_server {port} {
global echo
set echo(main) {socket -server EchoAccept $port}
}
proc EchoAccept {sock addr port} {
global echo
puts "Accept $sock from $addr port $port"
set echo(addr,$sock) [list $addr $port]
f configure $sock -buffering line
fileevent $sock readable [list Echo $sock]
}
proc Echo {sock} {
global echo
if {[eof $sock] || [catch {gets $sock line}]} {
# end of file or abnormal connection drop
close $sock
puts "Close $echo(addr,$sock)"
unset echo(addr,$sock)
} else {
if {[string compare $line "quit"] ==0} {
# Prevent new connections.
# Existing connections stay open.
close $echo(main)
}
puts $sock $line
}
}
客户端的代码是:
proc Echo_Client {host port} {
set s [socket $host $port]
fconfigure $s -buffering line
return $s
}
set s [Echo_Client localhost 2540]
puts $s "Hello!"
gets $s
行
set echo(main) {socket -server EchoAccept $port}
应该是
set echo(main) [socket -server EchoAccept $port]
通过进入事件循环
vwait forever
在结束时