题目👇
使用socketserver模块建立基于tcp协议通信的服务,收到客户端发来的英文字符串之后,将其变为大写发回客户端。
相关知识👇
socketserver模块简化了编写网络服务程序的任务,是python 标准库中很多服务器框架的基础。
- socketserver中包含了两种类,一种为服务类(server class) ,一种为请求处理类(request handle class),前者主要做的是建立链接的过程,后者注重用户数据的处理。
- 要实现一项服务,必须派生一个request handler class请求处理类,并重写父类的handle()方法。handle方法就是用来专门是处理请求的。该模块是通过服务类和请求处理类组合来处理请求的。
- socketserver模块提供的请求处理类有BaseRequestHandle
代码示例👇
服务端:
#coding:utf-8
#author:Mitchell
# 服务端必须满足至少三点:
# 1. 绑定一个固定的ip和port
# 2. 一直对外提供服务,稳定运行
# 3. 能够支持并发
import socketserver
# 自定义类用来处理通信循环
class MyTCPhanler(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
data = self.request.recv(1024)
if len(data) == 0:
break
print('-->收到客户端的消息: ', data)
self.request.send(data.upper())
except ConnectionResetError:
break
self.request.close()
if __name__ == '__main__':
server=socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyTCPhanler)
server.serve_forever() # 链接循环
客户端:
#coding:utf-8
#author:Mitchell
#客户端
from socket import *
#使用IPV4协议,使用UDP协议传输数据
client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1', 8081))
# 通信循环
while True:
sdata = input("请输入要发送的数据:")
if sdata == 'q':
break
client.send(sdata.encode('utf-8'))
data=client.recv(1024)
print(data)
client.close()