python实现文件上传

直接上代码,代码中有一些注释

# 1.首先定义usage函数
# 2.利用getopt模块获取命令行参数
# 3.区分客户端和服务端
# 4.编写客户端和服务器函数
# 5.编写文件上传函数、文件下载函数
import sys
import socket
import getopt
import time
upfile=""
def main():
    global upfile # 定义你要上传文件的名字
    help=False
    listen=False
    target=""
    port=0
    #2.利用getopt模块获取命令行参数
    opts,args=getopt.getopt(sys.argv[1:],"t:p:u:hl")
    for o,a in opts:
        if o=="-t":
            target=a
        elif o=="-p":
            port=int(a)
        elif o=="-u":
            upfile=a
        elif o=="-h":
            help=True
        elif o=="-l":
            listen=True
        else:
            assert False,"Unhadled Option" # 如果输入的参数不对,则退出程序
    if help:
        usage() # 如果有-h参数则打印帮助信息
    # 3.区分客户端和服务器
    if not listen: # 如果没有监听 状态则表示是一个客户端
        client_handle(target,port)
    else: # 否则则是一个服务端
        server_handle(port)
# 4.编写客户端函数和服务端函数
# 编写client_handle()
def client_handle(target,port):
    client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立socket套接字
    client.connect((target,port))
    client.send(upfile.encode('utf-8'))
    time.sleep(1) # 这里暂停一秒的意思是为了不让文件名和文件的内容接受混乱
    upload_file(client)
    client.close()
# 编写server_handle
def server_handle(port):
    server =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.bind(('0.0.0.0',port))
    server.listen(10) #监听的个数
    print("[*] Listening on 0.0.0.0:%d" % port)
    while True:
        client_socket,addr=server.accept()
        download_file(client_socket)

# 5.编写文件上传函数、文件下载函数
# 定义upload_file
def upload_file(client):
    f=open(upfile,'rb')
    data =f.read()
    f.close()
    client.send(data)
# 定义download_file
def download_file(client_socket):
    filename=client_socket.recv(1024)
    filename=filename.decode()
    print("[*]Receive the filename: %s" % filename)
    file_buffer="".encode('utf-8')
    while True:
        data=client_socket.recv(1024)
        if not data:
            break
        else:
            file_buffer+=data
    f=open(filename,'wb')
    f.write(file_buffer)
    f.close()
# 1.首先定义usage函数
def usage():
    print("@author:BigStrong")
    print("-------------------")
    print("help info: python3 file_upload.py -h")
    print("client :python3 upload.py -t [target] -p [port] -u [uploadfile]")
    print("server: python filename.py -lp [port] ")
    sys.exit()
if __name__=="__main__":
    main()

为了演示我开启了一台Ubuntu虚拟机作为服务端,windows10作为客户端

使用方法:

查看帮助信息: python3 file_upload.py -h
在这里插入图片描述

上传文件:

服务端: python3 file_upload.py -lp [监听端口]
客户端: python3 upload -u test.txt -t [服务端ip]
在这里插入图片描述在这里插入图片描述
文件传输成功
注意: 如果传输失败的话,尝试换一个端口尝试一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值