socketserver库是Python的标准库,提供了套接字服务端的框架,通过该框架可以简化服务端的创建流程。
1 socketserver库的导入
通过如图1显示的代码导入socketserver库。
图1 导入socketserver库
2 通过socketserver库创建TCP服务端
通过socketserver库创建TCP服务端分为如下步骤:首先定义socketserver库中BaseRequestHandler类的派生类;之后重写该派生类的handle()方法;最后实例化socketserver库中的TCPServer类,并通过该实例启动服务端。
2.1 定义socketserver库中BaseRequestHandler类的派生类
要创建一个服务端,必须定义socketserver库中的TCPServer类的实例,而定义该实例时需要指定请求处理(request handler)对象,该对象的定义了服务端如何处理客户端请求。BaseRequestHandler类是所有请求处理(request handler)对象类的父类。因此,需要首先定义socketserver库中BaseRequestHandler类的派生类,代码如图2所示。
图2 定义socketserver库中BaseRequestHandler类的派生类
其中,MyTCPHandler是自定义类,该类是socketserver库中BaseRequestHandler类的派生类。在MyTCPHandler中,重写了handle()方法,该方法的作用是定义了如何处理客户端的请求。第5行中定义了MyTCPHandler的data属性,self.request是父类的属性,表示与客户端通信的套接字,recv()表示接收来自客户端的数据,并保存到data属性中;第6行中的self.client_address是父类的属性,表示连入服务端的客户端列表;第7行打印出客户端发送的数据;第8行通过self.request即套接字,调用sendall()方法将收到的数据变为大写之后,发送给客户端。
2.2 启动服务端
通过socketserver库中的TCPServer类启动服务端,代码如图3所示。
图3 启动服务端
其中,第11行代码指定了服务端的IP地址和监听的端口号;第12行代码通过with...as语句定义了socketserver.TCPServer类的实例,server,并且将服务端的IP地址、监听的端口号以及自定义的请求处理类MyTCPHandler传递给该实例;第13行代码通过server调用serve_forever()方法启动服务端。
相关链接1 with...as语句请参考
Python中的with as语句_棉猴的博客-CSDN博客
3 运行效果
首先运行服务端,之后在windows10系统和windows7系统中分别运行Python网络编程改良版客户端-CSDN博客
中提到的客户端,此时服务端的运行效果如图4所示。
图4 服务端运行效果
此时,客户端运行效果如图5所示。
图5 服务端运行效果