day26
通过socket上传文件。
post_client.py
1 import socket 2 import os 3 sk = socket.socket() 4 print(sk) 5 address = ('127.0.0.1', 8003) 6 sk.connect(address) 7 8 BASE_DIR = os.path.dirname(os.path.abspath(__file__))#当前执行文件路径 9 10 while True: 11 inp = input('>>>').strip()#post abc.png 12 cmd, path = inp.split('|') #post, 需传送的文件即abc.png 13 path = os.path.join(BASE_DIR, path)#完整的路径拼接 14 filename = os.path.basename(path)#文件名字 15 file_size = os.stat(path).st_size#查看文件大小 16 17 file_info = 'post|%s|%s'%(filename, file_size)#文件信息 18 sk.sendall(bytes(file_info, 'utf8')) 19 20 f = open(path, 'rb')#字节b为bytes 21 has_sent = 0 22 while has_sent != file_size:#相同大小说明全部上传 23 data = f.read(1024)#取一部分发 24 sk.sendall(data) 25 has_sent += len(data) 26 27 f.close() 28 print('上传成功') 29 30 31 sk.close() 32 #print(sk)
post_server.py
1 import socket 2 import subprocess 3 sk = socket.socket()#创建socket 4 import os 5 print(sk) 6 7 address = ('127.0.0.1', 8003)#本机地址 8 sk.bind(address)#为socket绑定IP和端口号 9 10 sk.listen(3)#限制排队的个数 11 print('waiting......') 12 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 13 14 while True: 15 conn, addr = sk.accept() 16 17 while True: 18 data = conn.recv(1024) 19 cmd, filename, filesize = str(data, 'utf8').split('|')#获得信息 20 path = os.path.join(BASE_DIR, 'far', filename)#新路径 21 filesize = int(filesize) 22 23 f = open(path, 'ab') 24 has_receive = 0 25 #接收 26 while has_receive != filesize: 27 data = conn.recv(1024) 28 f.write(data) 29 has_receive += len(data) 30 31 f.close()#不能忘记关闭,否则出错 32 print('接收完毕!') 33 sk.close()#全关
执行post_server.py,再执行post_client.py,在client中输入post|abc.png进行上传。
(其中abc.png和两个执行文件同级,在以上三个文件相同位置还存在一个far包)