socketserver模块底层是基于socket模块开发,在socket的基础上进行了一层封装,实现了并发的功能,也就是说TCP协议的网络通信之前只能一对一的通信,而调用socketserver模块可以实现一对多的通信。
server端
import socketserver
import time
class Myserver(socketserver.BaseRequestHandler): # 自定义一个类名,但是必须继承父类BaseRequestHandler
def handle(self): # 必须定义一个名为handle的方法,否则会在父类执行此方法时pass
conn = self.request # self.request 相当于之前socket中的conn
while True:
try:
content = conn.recv(1024).decode()
print(content)
conn.send(content.upper().encode())
time.sleep(0.5)
except ConnectionResetError:
break
server = socketserver.ThreadingTCPServer(('127.0.0.1', 9001), Myserver) # 实例化ThreadingTCPServer类传入元组形式的ip+端口和自定义的类,相当于bind和lisen
server.serve_forever() # 保持服务一直开启
client端代码不变
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 9001))
while True:
sk.send(b'hello')
content = sk.recv(1204).decode()
print(content)
socketserver模块是为了简化网络服务器的开发,所以客户端的代码并没有改变。对于socketserver模块的应用格式基本上是固定的,和socket模块做对比后,记住serverserver的书写格式即可。