一、首先介绍一下 socketserver 模块中的类:
类 | 描述 |
BaseServer | 包含服务器的核心功能与混合(mix-in)类的钩子功能。这个类用于派生,不要直接生成这个类的类对象 |
TCPServer/UDPServer | 基本的网络同步TCP\UDP服务器 |
UnixStreamServer/UnixDatagramServer | 基本的基于文件同步TCP\UDP服务器 |
ForkingTCPServer/ForkingUDPServer |
ForkingMixIn 和 TCPServer/UDPServer 的组合
|
StreamRequestHandler/DatagramRequestHandler |
TCP/UDP 服务器的请求处理类的一个实现
|
ThreadingTCPServer/ThreadingUDPServer |
ThreadingMixIn 和 TCPServer/UDPServer 的组合
|
BaseRequestHandler
|
包含处理服务请求的核心功能。只用于派生新的类,不要直接生成这个类的对象,可以考虑使用StreamRequestHandler或DatagramRequestHandler
|
# 服务端 # -*- coding: utf-8 -*- import socketserver class MyTCPhandler(socketserver.BaseRequestHandler):
# handle 方法必须定义,因为在该继承的父类中已经定义了该接口 def handle(self): while True: try: data = self.request.recv(1024) if len(data) == 0: break print('收到客户端消息:%s' % data) self.request.send(data.upper()) except ConnectionResetError: break self.request.close() if __name__ == '__main__': # socketserver在windows系统之上,不支持多进程 server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyTCPhandler) server.serve_forever() # 连接循环
# 客户端 from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('127.0.0.1', 8080)) while True: data = input('>>>:').strip() if not data: continue # client.send('hello'.encode('utf-8')) client.send(data.encode('utf-8')) get_data = client.recv(1024) print(get_data.decode('utf-8'))