二、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