简单地在程序当前目录下上传一张图片: 1.png 到程序的 yuan 文件夹下。这里使用的是固定参数 post,如果后期有需求,可以增加判断来更加完善程序。
# server 端
import socket, os
sk = socket.socket()
address=(\'127.0.0.1\', 8000)
sk.bind(address)
sk.listen(3)
print(\'waiting....\')
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
while 1:
conn, addr = sk.accept()
while 1:
data = conn.recv(1024)
cmd, filename, filesize = str(data, \'utf8\').split(\'|\')
path = os.path.join(BASE_DIR, \'yuan\', filename)
f = open(path, \'ab\')
has_receive = 0
while has_receive != filesize:
data = conn.recv(1024)
f.write(data)
has_receive += len(data)
f.close()
# client 端
import socket, os
sk = socket.socket()
print(sk)
address = (\'127.0.0.1\', 8000)
sk.connect(address)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
#print(BASE_DIR)
while True:
inp = input(\'>>>\') # 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, \'utf8\'))
f = open(path, \'rb\')
has_sent = 0
while has_sent != file_size:
data = f.read(1024)
sk.sendall(data)
has_sent += len(data)
f.close()
print(\'上传成功\')
运行结果:
<socket.socket fd=296, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
>>>post|1.png
上传成功