基于 SocketServer 实现并发
511 字
3 分钟
基于 SocketServer 实现并发
基于socketserver实现并发
多进程实现并发
【一】TCP协议实现并发
【1】客户端
# -*-coding: Utf-8 -*-# @File : 客户端 .py# author: Chimengmeng# blog_url : https://www.cnblogs.com/dream-ze/# Time:2023/6/23from socket import *
client = socket(AF_INET, SOCK_STREAM)client.connect(('127.0.0.1', 8080))
while True: msg_client = input('请输入指令:>>>>>').strip()
if len(msg_client) == 0: continue
client.send(msg_client.encode('utf8'))
msg_from_server = client.recv(1024) print(msg_from_server.decode('utf8'))【2】服务端
# -*-coding: Utf-8 -*-# @File : 服务端 .py# author: Chimengmeng# blog_url : https://www.cnblogs.com/dream-ze/# Time:2023/6/23
import socketserver
class MyRequestHandler(socketserver.BaseRequestHandler): def handle(self): # print(self.request) ----> # 如果是 TCP 协议, self.request ----> conn # print(self.client_address) ----> # 如果是 TCP 协议, self.client_address ----> ip + port print(self.request) print(self.client_address)
# (2)任务二:拿到链接对象,与其进行通信循环 =====> handle方法 while True: try: # 接收来自客户端的信息指令 msg_from_client = self.request.recv(1024)
if len(msg_from_client) == 0: continue
# 反馈信息给客户端 msg_to_client = msg_from_client.upper() self.request.send(msg_to_client)
except Exception as e: print(e) break
self.request.close()
# (1)任务一:循环的从半连接池中取出链接请求与其建立双向链接,拿到链接对象
# 实例化链接对象server = socketserver.ThreadingTCPServer(('127.0.0.1', 8088), MyRequestHandler)# 创建链接循环 ---- 一直提供服务(死循环过程)server.serve_forever()'''等同于以下操作
while True: conn,client_address = server.accept() # 启动一个线程(conn,client_address)'''【二】UDP协议实现并发
【1】服务端
# -*-coding: Utf-8 -*-# @File : 服务端 .py# author: Chimengmeng# blog_url : https://www.cnblogs.com/dream-ze/# Time:2023/6/23import socketserver
class MyRequestHandler(socketserver.BaseRequestHandler): def handle(self): ''' # print(self.request) # (b'hellow', <socket.socket fd=420, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>) ''' # 接收到的第一个数据是传入进来的信息 msg_from_client = self.request[0] # 接收到的第二个数据是传入进来的链接对象 server = self.request[1]
client_address = self.client_address # ('127.0.0.1', 64418)
# 回传数据 msg_to_client = msg_from_client.upper() server.sendto(msg_to_client, client_address)
IP = '127.0.0.1'PORT = 8080server = socketserver.ThreadingUDPServer((IP, PORT), MyRequestHandler)server.serve_forever()
'''相当于# 只负责循环的接收对象while True: msg_from_client, client_address = server.recvfrom(1024)
# 启动一个线程去处理后续的操作 msg_to_client = msg_from_client.upper() server.sendto(msg_to_client, client_address)'''
server.close()【2】客户端
# -*-coding: Utf-8 -*-# @File : 客户端 .py# author: Chimengmeng# blog_url : https://www.cnblogs.com/dream-ze/# Time:2023/6/23
from socket import *
client = socket(AF_INET, SOCK_DGRAM)
while True: msg_to_server = input('请输入信息:>>>>>').strip()
msg_to_server = msg_to_server.encode('utf-8') IP = '127.0.0.1' PORT = 8080 client.sendto(msg_to_server, (IP, PORT))
msg_from_server = client.recvfrom(1024)
print(msg_from_server)
client.close()支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
基于 SocketServer 实现并发
https://firefly.cuteleaf.cn/posts/framework/network/140基于socketserver实现并发/相关文章智能推荐
1
C 语言发展史
编程语言了解 C 语言从 BCPL、B 语言到现代标准 C 的发展历程、核心特点与应用领域。
2
C 语言开发环境的安装与配置
编程语言在 Windows、Linux 与 macOS 上安装 C 工具链,配置编辑器,并编译运行第一个 C 程序。
3
C 语言初识:程序运行机制与基本结构
编程语言认识 C 程序从源代码到运行的完整流程,以及基础语法和程序的基本结构。
4
C 语言基础:注释、关键字、变量与数据类型
编程语言学习 C 语言的注释、关键字、标识符、常量、变量和基本数据类型等基础知识。
5
C 语言数据类型
编程语言理解 C 语言的数据类型体系,包括基本类型、整数类型、浮点类型和逻辑类型。
随机文章随机推荐














