FTP上传功能

##服务端import socket,struct,json,os
class MYTCPServer:
    address_family=socket.AF_INET
    socket_type=socket.SOCK_STREAM
    allow_reuse_address=False
    max_packet_size=8192
    coding=‘utf-8‘
    request_queue_size=5
    server_dir=‘file_upload‘
    def __init__(self,server_address,bind_and_activate=True):
        self.server_address=server_address
        self.socket=socket.socket(self.address_family,self.socket_type)
        if bind_and_activate:
            try:
                self.server_bind()
                self.server_activate()
            except:
                self.server_close()

    def server_bind(self):
        if self.allow_reuse_address:
            self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        self.socket.bind(self.server_address)
        self.server_address=self.socket.getsockname()   # 返回的就是元组(‘127.0.0.1‘, 8080)
    def server_activate(self):
        self.socket.listen(self.request_queue_size)
    def server_close(self):
        self.socket.close()
    def get_request(self):
        return self.socket.accept()
    def close_request(self,request):
        request.close()

    def run(self):
        while True:
            self.conn,self.client_addr=self.get_request()
            print(‘from client‘,self.client_addr)
            while True:
                try:
                    head_struct=self.conn.recv(4)
                    if not head_struct:break
                    head_len=struct.unpack(‘i‘,head_struct)[0]
                    head_json=self.conn.recv(head_len).decode(‘utf-8‘)
                    head_dic=json.loads(head_json)

                    print(head_dic)
                    #head_dic={‘cmd‘:‘put‘,‘filename‘:‘a.txt‘,‘filesize‘:123123}
                    cmd=head_dic[‘cmd‘]
                    if hasattr(self,cmd):
                        func=getattr(self,cmd)
                        func(head_dic)
                except Exception:
                    break
            self.close_request(self.conn)

    def put(self,args):
        file_path=os.path.normpath(os.path.join(self.server_dir,args[‘filename‘]))
        #os.path.normpath返回该文件的完整路径.文件名
        filesize=args[‘filesize‘]
        recv_size=0
        print(‘----->‘,file_path)
        with open(file_path,‘wb‘) as f:
            while recv_size < filesize:
                recv_data = self.conn.recv(self.max_packet_size)
                f.write(recv_data)
                recv_size+=len(recv_data)
                print(‘recvsize:%s filesize:%s‘ %(recv_size,filesize))

tcpserver1=MYTCPServer((‘127.0.0.1‘,8080))
tcpserver1.run()
#os.path.normpath  返回某个文件的完整路径及文件名 #os.path.baaename  返回上述完整路径的文件名
print(os.path.isfile(‘F:\wangkc\day08\s4.py‘))  #True print(os.path.getsize(‘F:\wangkc\day08\s4.py‘))  #2264
#客户端
import socket,struct,json,os

class MYTCPClient:
    address_family=socket.AF_INET
    socket.type=socket.SOCK_STREAM
    allow_reuse_address=False
    max_packet_size=8192
    coding=‘utf-8‘
    request_queue_size=5
    def __init(self,server_address,connect=True):
        self.server_address=server_address
        self.socket=socket.socket(self.address_family,self.socket_type)
        if connect:
            try:
                self.client_connect()
            except:
                self.client_close()
                raise
    def client_connect(self):
        self.socket.connect(self.server_address)
    def client_close(self):
        self.socket.close()
    def run(self):
        while True:
            inp=input(‘>>: ‘).strip()
            if not inp:continue
            l=inp.split()
            cmd=l[0]
            if hasattr(self,cmd):
                func=getattr(self,cmd)
                func(l)

    def put(self,args):
        cmd=args[0]
        filename=args[1]
        if not os.path.isfile(filename):
            print(‘file:%s is not exists‘ % filename)
            return
        else:
            filesize=os.path.getsize(filename)

        head_dic={‘cmd‘:cmd,‘filename‘:os.path.basename(filename),‘filesize‘:filesize}
        print(head_dic)
        head_json=json.dumps(head_dic)
        head_json_bytes=bytes(head_json,encoding=self.coding)
        head_len_struct=struct.pack(‘i‘,len(head_json_bytes))
        self.socket.send(head_len_struct)
        self.socket.send(head_json_bytes)
        send_size=0
        with open(filename,‘rb‘) as f:
            for line in f:
                self.socket.send(line)
                send_size+=len(line)
                print(send_size)
            else:
                print(‘upload successful‘)

client=MYTCPClient((‘127.0.0.1‘,8080))
client.run()
 


 

时间: 2024-10-12 21:17:21

FTP上传功能的相关文章

FTP上传文件,报错java.net.SocketException: Software caused connection abort: recv failed

FTP上传功能,使用之前写的代码,一直上传都没有问题,今天突然报这个错误: java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketIn

网络编程 --ftp上传

这是一个模拟的ftp上传功能,客户端输入命令之后,在客户端执行一个命令,把输入都上传到服务端在返回,前面是一个类似练习的例子 客户端 #小试牛刀 # import socket # kt=socket.socket() #创建socket对象 # info=("127.0.0.1",8800) # kt.connect(info) # while True: # import subprocess # res = subprocess.Popen("ipconfig"

Java实现FTP上传下载功能

Java FTP客户端工具包很多,在此我选用的Apache的FTPClient.这个包的获取可以通过http://commons.apache.org/net/来获取,我使用的是最新的commons-net-1.4.1.zip.其中包含了众多的java网络编程的工具包,官方文档列举如下: 1.支持网络协议如下: FTP.NNTP. SMTP.POP3.Telnet.TFTP.Finger.Whois.rexec/rcmd/rlogin.Time (rdate) and Daytime.Echo.

[Android中级]使用Commons-net-ftp来实现FTP上传、下载的功能

本文属于学习分享,如有雷同纯属巧合 利用业余时间.学习一些实用的东西,假设手又有点贱的话.最好还是自己也跟着敲起来. 在android上能够通过自带的ftp组件来完毕各种功能.这次是由于项目中看到用了Commons-net-ftp的包完毕的,所以就以此试试手. 首先,代码中有所參考借鉴了:Android中使用Apache common ftp进行下载文件 博文 这次是分享关于在android上使用FTP协议(文件传输协议)进行文件的下载.上传的功能.我们能够先了解一下,FTP和HTTP一样都是I

ftp上传与下载

在企业级应用系统中,文件上传与下载是最常用的功能之一.当然,这些文件也是有存储周期,根据业务需要而定. 驾驶员培训管理系统(简称驾培系统)需要判断学员学时的有效性,通过学时记录仪,采集学员在教练车中里照片, 上传到web服务器中,由web服务器上传到文件服务器,,比便做人脸比对..为保证学时的实时性,这期间会产生多次比对,当 然也会产生许多学员人脸照片.为方便管理这些照片,我们会采用分层级目录来存放照片. 这里主要介绍基于commons-net实现ftp创建文件夹.上传.下载功能. 创建文件夹

C# ftp 上传、下载、删除

1 public class FtpHelper 2 { 3 public static readonly FtpHelper Instance = new FtpHelper(); 4 5 /// <summary> 6 /// 取得文件名 7 /// </summary> 8 /// <param name="ftpPath">ftp路径</param> 9 /// <returns></returns> 10

如何在Web页面中集成文件上传功能

当前,个人主页制作非常流行.当用户开发好自己的页面时,需要将文件传输到服务器上,解决这个问题的方法之一 是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录.由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客户程序,用户必须懂得如何使用基于命令行 的FTP客户,或掌握一种新的基于窗口形式的FTP客户程序.因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行 的. 如果我们能把文件

python网络编程socket模块实现ftp上传下载

本实验实现ftp上传文件下载文件功能,并具有校验文件完整性,打印进度条功能, 主要练习socket,struct模块. ftp用户文件存放在user.json文件中 user.json文件内容 {"lisi": "abcdef", "hyh": "123456"} ftp客户端脚本ftpclient.py #!/usr/bin/python # --*-- coding: utf-8 --*-- import socket i

批处理向FTP上传指定属性的文件 批处理增量备份的例子

使用windows批处理向FTP上传具有指定属性的文件,类似增量备份功能. 对一个目录里的几个文件自动上传FTP时只上传有归档属性的文件,然后FTP上传成功后自动清除(本机)刚上传文件的归档属性. 类似于对文件增量备份的功能. @echo off rem 指定FTP用户名 set ftpUser=FTPUSERNAME rem 指定FTP密码 set ftpPass=FTPPASSWORD rem 指定FTP服务器地址 set ftpIP=192.168.0.2 设置待上传的本地文件夹目录 se