博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python实现文件上传
阅读量:3959 次
发布时间:2019-05-24

本文共 2452 字,大约阅读时间需要 8 分钟。

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

# 1.首先定义usage函数# 2.利用getopt模块获取命令行参数# 3.区分客户端和服务端# 4.编写客户端和服务器函数# 5.编写文件上传函数、文件下载函数import sysimport socketimport getoptimport timeupfile=""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_handledef 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_filedef upload_file(client):    f=open(upfile,'rb')    data =f.read()    f.close()    client.send(data)# 定义download_filedef 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]
在这里插入图片描述在这里插入图片描述
文件传输成功
注意: 如果传输失败的话,尝试换一个端口尝试一下

转载地址:http://guhzi.baihongyu.com/

你可能感兴趣的文章
我的工作日志2
查看>>
我的工作日志5
查看>>
aspx上传、预览图片
查看>>
我的工作日志6
查看>>
我的软件工程之路(五)—四个月总结
查看>>
从入职到离职的收获——ICT四个月
查看>>
项目中用到的一个导入Excel的方法
查看>>
项目中一个用于导出word的方法
查看>>
项目中用到小技术点
查看>>
管理数据库连接不得不注意的地方
查看>>
KS系统总结
查看>>
测试Jsp 静态包含和动态包含
查看>>
简析几种常用的Web监听
查看>>
Web应用过滤器Fileter
查看>>
代理模式(Proxy)
查看>>
采用动态代理对事务进行封装
查看>>
采用ThreadLocal维护Connection
查看>>
测试JSTL表达式
查看>>
一口一口吃掉Struts(六)——动态ActionForm
查看>>
一口一口吃掉struts(七)——ActionForward知多少
查看>>