klvchen

简单地在程序当前目录下上传一张图片: 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
上传成功

分类:

技术点:

相关文章: