【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
View Code

 

posted on 2018-02-28 09:24  yingriwuhen  阅读(224)  评论(0编辑  收藏  举报