tcl socket
1.socket 服务端开启
格式:socket –server command ?options? port
-server :表明开启的是服务器端
port:端口
command:当有客户端来连接的时候,执行这个过程,这个过程有三个参数
channel:给新客户端的通道
address:提供给客户端连接的 ip 地址
port:端口
2.客户端连接服务器端
格式:socket ?options? host port
host port :客户端连接的服务器 ip和端口
3.fileevent定义了一个句柄,满足条件时执行
格式:fileevent channelId readable? script?
fileevent channelId writeable? script?
readable:当通道 channelId 有数据准备好被读了,执行脚本 script
writeable:当通道 channelId 有数据准备好接收数据了,执行脚本 script
4.vwait 命令使执行暂停,直到 varName 被赋值,即便赋值前后相同
格式:vwait varName
例子一:简单的客户端连接服务端
-----------------------------------------------------------------------------------------
server:
proc accept {chan addr port} {
puts "$addr:$port says [gets $chan]"
puts $chan goodbye
close $chan
}
socket -server accept 12345
vwait forever
client:
set chan [socket 127.0.0.1 12345]
puts $chan hello
flush $chan
puts "server says [gets $chan]"
close $chan
运行结果:
-servr
127.0.0.1:3148 says hello
-client
server says goodbye
例子二:显示服务端时间
格式:clock seconds
功能:返回从计算机纪元开始的秒数,不同操作系统开始时间可能不同,所以这个值通常用来作为命
令 clock format 的输入
clock format [clock seconds] 返回当前时间
clock format [clock seconds] -format %H:%M:%S 以“时:分:秒”形式返回当前时间
-----------------------------------------------------------------------------------------
server:
proc Server {channel clientaddr clientport} {
puts "Connetion from $clientaddr $clientport registered"
puts $channel [clock format [clock seconds]]
close $channel
}
socket -server Server 9911
vwait forever
client:
set chan [socket 127.0.0.1 9911]
gets $chan line
close $chan
puts "The time on $chan is $line"
运行结果:
-server
Connetion from 127.0.0.1 3163 registered
-client
The time on sock268 is Tue Dec 15 09:07:00 +0800 2009