實現:client上傳圖片文件到server
如下圖所示,圖片與post_client.py在同一當前目錄
-------------------post_server.py-----------------------------------------
import subprocess
#subprocess.Popen,主要用Popen這個類實現shell
import os
import socket
sk=socket.socket()
print(sk)
address=('127.0.0.1',8005)
sk.bind(address)
sk.listen(3)
print('waiting.....')
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
while True:
conn,addr = sk.accept()
print(addr)
while True:
data=conn.recv(1024) #接收
cmd,filename,filesize=str(data,'utf-8').split('|') #用三個變量解析接收的並用|分隔
path=os.path.join(BASE_DIR,'yuan','filename') #路徑拼接,這里指定在yuan下
filesize=int(filesize)
#循環收
f=open(path,'ab')
has_receive=0
while has_receive!=filesize:
data=conn.recv(1024)
f.write(data)
has_receive+=len(data)
f.close()
--------------------post_client.py------------------------
import socket
import os
sk=socket.socket()
print(sk)
address=('127.0.0.1',8005)
sk.connect(address)
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
while True:
inp=input('>>>').strip() #post|1.png
cmd,path = inp.split('|') #兩個變量接收,並用|分隔開
path=os.path.join(BASE_DIR,path) #路徑拼接-----絕對路徑
filename=os.path.basename(path) #你放參數路徑,它會取到最后的文件名字
file_size=os.stat(path).st_size # 看文件大小
file_info='post|%s|%s'%(filename,file_size) #
sk.sendall(bytes(file_info,'utf-8')) #發過去
#循環發
f = open(path, 'rb') # 打開
has_sent=0 #已發的
while has_sent !=file_size:
data=f.read(1024) #每次1024個的一段段發
sk.sendall(data)
has_sent+=len(data)
f.close()
print('上傳成功')
sk.close()