【Python网络编程】【02-2】socket编程之client端
二、socket client端
1 from socket import * 2 import hashlib 3 import datetime 4 import os 5 6 HOST = 'localhost' 7 # HOST = '10.119.189.69' 8 # HOST = '10.119.207.167' 9 # HOST = '10.180.44.227' 10 # HOST = '10.63.173.242' 11 12 PORT = 21567 13 BUFSIZE = 1024 14 ADDR = (HOST, PORT) 15 16 # 1.创建socket实例 17 cliSockServer = socket(AF_INET, SOCK_STREAM) 18 # 2.socket连接服务端IP+端口号 19 cliSockServer.connect(ADDR) 20 21 while True: 22 cmd = input(">>: ") 23 if len(cmd) == 0: 24 continue 25 if cmd.startswith("get "): 26 try: 27 fileName = cmd.split('get ')[1] 28 except Exception as e: 29 print(e) 30 print("input like 'get filename'") 31 continue 32 cliSockServer.send(cmd.encode()) 33 data_res = cliSockServer.recv(BUFSIZE) 34 if data_res.decode('utf-8') == 'no such file': 35 print('File does not exist, input again!') 36 continue 37 elif data_res.decode('utf-8') == 'target is dir, not file': 38 print('target is dir, not file') 39 continue 40 server_file_size = int(data_res.decode('utf-8')) 41 print("server file size is: ", server_file_size) 42 cliSockServer.send('server file size received'.encode()) 43 print("[%s] Start to receive server file" % datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')) 44 start_time = datetime.datetime.now() 45 client_file_size = 0 46 m = hashlib.md5() 47 f = open(os.path.basename(fileName)+'.new', 'wb') 48 while client_file_size < server_file_size: 49 if server_file_size - client_file_size > 8192: 50 size = 8192 51 else: 52 size = server_file_size - client_file_size 53 data = cliSockServer.recv(size) 54 m.update(data) 55 client_file_size += len(data) 56 f.write(data) 57 print("%s Mb is left to be received" % round((server_file_size - client_file_size)/(1024*1024), 2)) 58 else: 59 print("server file md5: ", cliSockServer.recv(1024).decode('utf-8')) 60 print("client file md5: ", m.hexdigest()) 61 print("[%s] file received done!" % datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')) 62 end_time = datetime.datetime.now() 63 transfer_speed = round(server_file_size/(1024*1024), 2)/(end_time - start_time).seconds 64 print("file transfer average speed is: %s MB/s" % transfer_speed) 65 f.close() 66 elif cmd == 'quit': 67 cliSockServer.close() 68 break 69 else: 70 print("<Input format error, type 'get <filePath>', type 'quit' to exit>") 71 continue
posted on 2018-02-28 09:24 yingriwuhen 阅读(224) 评论(0) 编辑 收藏 举报