一、首先介绍一下 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'))