模拟TCP通信过程,此例为一次性连接,实现的功能是,客户端连接服务器21567端口,采用的连接方式是TCP,发送数据给与服务端,服务端打印出数据,然后反馈(【当前时间】发送数据)给回客户端,断开连接
import socket #导入socket模块
from time import strftime #导入时间模块
host = '' #定义接受的主机,此处为all主机
port = 21567 #定义监听的端口
addr = (host, port) #把主机和端口放到一个元组内
s = socket.socket() #定义服务端
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #设定默认参数,此处的参数功能是,socket模块,不会一次连接完成后,自动退出。
s.bind(addr) #服务端绑定地址,地址就是刚刚定义的主机和监听端口
s.listen(2) #启用监听
cli_sock, cli_addr = s.accept() #服务端先接收数据,接收的数据是元组类型的,里面包含的值就是客户端连接信息,客户端地址信息
rdata = cli_sock.recv(1024) #定义数据rdata为客户端连接信息,recv为接收信息的实例。每次接收1024字节。
rdata = rdata.decode('utf8') #处理rdata数据,utf8转码(此处不明白原理。但不转码很难看)
print(rdata.strip()) #打印出接收到的数据,去除数据两边的空白符。
sdata = '[%s] %s' % (strftime('%H:%S:%M'), rdata) #定义发送的数据为(【当前时间】接收到的信息),
cli_sock.send(sdata.encode('utf8')) #客户端连接发送定义好的发送数据,utf8转码(此处不明白原理。但不转码很难看)
cli_sock.close() #关闭客户端连接
s.close() #关闭服务器连接
此例为一次性连接,函数式编程,程序的执行是从上到下执行的。比较好理解。总的来说,建立服务端,接收客户端数据,反馈客户端数据,关闭客户端连接,关闭服务端连接。