标签:
在《python---socket模块》中通过socket模块实现了串行处理的socket通信
在python中可以通过socketserver模块实现并发通信,而socketserver之所以能实现并发,是通过IO多路复用和多进程、多线程实现的
下面是使用socketserver模块实现多线程并发处理请求的示例
服务器端
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = ‘zhoufeng‘ import socketserver class MyServer(socketserver.BaseRequestHandler): #自定义请求处理类,继承自BaseRequestHandler类 def handle(self): #重写handle方法,BaseRequestHandler中的handle方法为空 conn=self.request #建立一个通信连接,类似socket模块中的accept方法 conn.sendall(bytes(‘欢迎致电 10086,请输入xxx‘,encoding=‘utf8‘)) #发送比特形式的数据 while True: data=conn.recv(1024) #接收数据 print(‘[%s] says:%s‘ %(self.client_address,data.decode())) #client_address表示客户端地址 conn.sendall(data.upper()) #发送数据 if __name__==‘__main__‘: #ThreadingTCPServer类有两个参数,一个套接字元组,一个请求处理类 #套接字元组(‘127.0.0.1‘,8009) #这里的请求处理类是我们自定义的MyServer #请求处理类也可以是BaseRequestHandler的派生类StreamRequestHandler和DatagramRequestHandler #每过来一个请求,就会生成一个server实例(可以理解为一个线程) server=socketserver.ThreadingTCPServer((‘127.0.0.1‘,8009),MyServer) #serve_forever方法是什么作用? server.serve_forever()
客户端
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = ‘zhoufeng‘ import socket ip_port=(‘127.0.0.1‘,8009) s=socket.socket() s.connect(ip_port) welcome_msg=s.recv(1024) print("from server:",welcome_msg.decode()) while True: #发消息 send_data=input(">>: ").strip() if len(send_data)==0:continue s.sendall(bytes(send_data,encoding=‘utf8‘)) #收消息 recv_data=s.recv(1024) print(str(recv_data,encoding=‘utf-8‘)) s.close()
标签:
原文地址:http://www.cnblogs.com/zhoufeng1989/p/5699319.html