【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

 

转载于:https://www.cnblogs.com/vichurd/p/8481904.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值