十七.Python_socketserver模块并发网络编程

本文详细介绍使用Python的socketserver模块进行并发网络编程的方法。包括TCP服务器和UDP服务器的实现,通过ThreadingTCPServer和ThreadingUDPServer处理多个客户端的并发请求,展示如何定义处理函数以收发信息。

Python_socketserver模块并发网络编程

 #TCPServer

#socketserver  服务器并发访问的模块,服务器可以同时处理多个客户端的请求
#导入import socketserver
#定义一个继承socketserver.BaseRequestHandler的类
#类中定义handle函数
#self.request  服务器获取的客户端的链接
#self.client_address  客户端的ip与端口
#self.request.send() 发送信息
#self.request.recv() 接收信息
#socketserver.ThreadingTcpServer(ip_port,类) 定义TCP并发客户端,绑定客户端连接的类
#socket.server_forever()  服务器处理一次请求后,继续等待线程接入


import socketserver
ip_port=("127.0.0.1",8006)
class server(socketserver.BaseRequestHandler):
    def handle(self):
        print("conn:>>%s"%self.request)
        # print("client_addres:>>%s"%self.client_address)
        while True:
            data=self.request.recv(1024).decode("utf-8")
            print("客户端发来信息:>>%s %s"%(data,self.client_address))
            self.request.send(data.upper().encode("utf-8"))

if  __name__=="__main__":
    so=socketserver.ThreadingTCPServer(ip_port,server)
    so.serve_forever()

#UDP Server


#socketserver UDP
#定义继承socket.BaseRequestHandler的类
#类定义handle函数
#self.request  接收的是个tuple,第一个是数据,第二个是连接
#self.client_address 获取的是客户端的地址与端口
#self.request[0]是接收的数据
#self.request[1] 是客户端的连接
#self.request[1].sendto(data,self.client_address) 向客户端发送数据

#s=socketserver.ThreadingUdpServer(ip_port,绑定的类)  创建基于服务器类的Udp服务
#s.socket.server_forever()  循环接收不同客户端的请求

import socketserver

ip_port=('127.0.0.1',8080)
class udpserver(socketserver.BaseRequestHandler):
    def handle(self):
        print(self.request)
        data=self.request[0].decode("utf-8")
        # data,addr=self.request.recv(1024).decode("utf-8")
        print("客户端发来请求:>>%s  --%s"%(data,self.request[1]))
        self.request[1].sendto(data.upper().encode("utf-8"),self.client_address)


if __name__=="__main__":
    us=socketserver.ThreadingUDPServer(ip_port,udpserver)
    us.serve_forever()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值