TCL/TK网络编程:服务器端、客户端的极简例子
服务器端:简单理解,就是一个软件,它持续盯着本地系统的一个或n个网络端口(一般称为"监听"),当端口收到信息时,对信息进行处理(符合条件的反馈,否则忽略)
客户端:通过网络向网络地址的指定端口发送信息,接收反馈的软件
服务器-客户端运行方式简介:
每一个服务器端软件都会通过端口与外界连通,当它跟一个客户端软件交换信息之后,会分配一个临时端口(一般是靠后的端口,比如60233)持续与该客户端通信——这样可以避免监听的端口出现阻塞,继续等待其它客户端。
另:根据网络底层的TCP/IP协议,计算机共有65535个端口,其中前1023为保留端口,有公约的用途。但随着发展,保留端口已经不够用了,编程时建议选数字大的端口,以免发生端口冲突。
进行基于网络的编程时还需要一些辅助软件,最基本的是发收网络信息的小软件,比如Windows平台的Telnet客户端(可能需要手动在 里激活)和Linux平台的nc

下面是TCL/TK服务器端的例子,该代码实现监听6060端口,并向每一个连接的客户端发送固定的消息 "+OK 象喻@BiliBili Server Ready" 同时把来访客户端的信息在本地显示出来:
注意:为便于理解使用了中文,如果运行报错请换成英文
运行后会先显示"Server Run",用Telnet连接127.0.0.1 6060之后:

此时Telnet窗口显示的是:

以上是服务器端简单的例子。


下面稍微复杂点,持续显示接收到的客户端信息:
注意:Windows上的Telnet在输入字符时即会向服务器端发送信息(即一个字符一个字符发送),但是回车Enter后才算一行,所以在TCL的服务器端会显示出很多空行。并且Telnet的c退出指令跟直接关闭窗口一样,并非正常的关闭通道。如果在"通道处理"的代码中,有 puts $sock "象喻@BiliBili" 这样的语句,最好放在 catch 命令里,否则在面对Telnet这样的客户端时会导致异常断开错误(会报错,但不会导致服务器程序终止执行)。


这个服务器程序除了用Telnet测试外,还可以用浏览器测试,虽然浏览器接收不到http消息会报错,但在服务器端是可以正常显示浏览器发送过来的http协议请求的:



客户端代码,也是最简单的例子:
其它代码跟服务器端类似