一:多线程网络编程
模板:
import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): pass server = socketserver.ThreadingTCPServer(('192.168.13.84',8001,),MyServer) server.serve_forever()
|
案例:多线程
1 import socketserver 2 3 class Myserver(socketserver.BaseRequestHandler): 4 def handle(self):# 方法名是固定的 5 # 字节类型 #self.request等价于conn 6 while 1: 7 # 针对window系统 8 try: 9 print("等待信息") 10 data = self.request.recv(1024) # 阻塞 11 # 针对linux 12 if len(data) == 0: 13 break 14 if data == b'exit': 15 break 16 response = data + b'SB' 17 self.request.send(response) 18 except Exception as e: 19 break 20 21 self.request.close() 22 23 24 # 1 创建socket对象 2 self.socket.bind() 3 self.socket.listen(5) 25 server=socketserver.ThreadingTCPServer(("127.0.0.1",8899),Myserver) 26 27 server.serve_forever() # 用于 accept() 等待连接
客户端
1 import socket 2 3 sk = socket.socket() 4 5 sk.connect(('127.0.0.1',8899)) 6 7 while 1: 8 name = input(">>>>:") 9 sk.send(name.encode('utf-8')) # 字节 10 11 response = sk.recv(1024) # 字节 12 print(response.decode('utf-8'))
二:多线程网络编程
案例1:
1 #多线程 2 import threading 3 import time 4 5 def task(a1,a2,a3): 6 time.sleep(2) 7 print('拿快递') 8 def play(): 9 print('和女朋友去耍') 10 def wm(): 11 print('去拿外卖') 12 13 # 创建一个线程 14 # 让该线程去执行任务:函数 15 t1 = threading.Thread(target=task,args=(1,2,3,)) # args=(1,2,3,)对应task中的参数 16 # 去执行吧 17 t1.start() 18 19 20 # 创建一个线程 21 # 让该线程去执行任务:函数 22 t2 = threading.Thread(target=play) 23 # 去执行吧 24 t2.start() 25 26 # 创建一个线程 27 # 让该线程去执行任务:函数 28 t3 = threading.Thread(target=wm) 29 # 去执行吧 30 t3.start() 31 32 print('玩扇子') 33 print('煽风点火') 34 print('耍贱...') 35 36 #3个子线程1个主线程
|
案例2:
1 import time 2 3 import threading 4 5 6 7 def task(n): 8 9 print('开始执行任务:',n) 10 11 time.sleep(10) 12 13 print('...') 14 15 print('任务%s 执行完毕:'%n) 16 17 18 19 while True: 20 21 name = input("请输入任务:") 22 23 t = threading.Thread(target=task,args=(name,)) 24 25 t.start() |
案例3:线程与socket
1 import time 2 3 import socket 4 5 import threading 6 7 8 9 def task(conn): 10 11 time.sleep(20) 12 13 data = conn.recv(1024) 14 15 print(data) 16 17 conn.close() 18 19 20 21 server = socket.socket() 22 23 server.bind(('192.168.13.84',8001,)) 24 25 server.listen(5) 26 27 28 29 while True: 30 31 conn,addr = server.accept() 32 33 t = threading.Thread(target=task,args=(conn,)) 34 35 t.start()
|
案例4:利用requests/uuid第三方模块从网站上下载多个图片
1 # 案例3:利用requests第三方模块从网站上下载多个图片 2 ''' 3 pip3 install requests 4 ''' 5 6 import threading 7 import requests 8 import uuid #随机生成字符串 9 url_list = [ 10 'https://img01.sogoucdn.com/app/a/100520024/924055f74736446fb5253068062585c0', 11 'https://img01.sogoucdn.com/app/a/100520024/f4d580ab0d9f5d514c9471b23bba0561', 12 ] 13 def task(url): 14 """ 15 1. DNS解析,根据域名解析出IP 16 2. 创建socket客户端 sk = socket.socket() 17 3. 向服务端发起连接请求 sk.connect() 18 4. 发送数据(我要图片) sk.send(...) 19 5. 接收数据 sk.recv(8096) 20 21 接收到数据后写入文件。 22 """ 23 ret = requests.get(url) 24 file_name = str(uuid.uuid4()) + '.jpg' 25 with open(file_name,mode='wb') as f: 26 f.write(ret.content) 27 28 for url in url_list: 29 t = threading.Thread(target=task,args=(url,)) 30 t.start() |

浙公网安备 33010602011771号