Python分享之分分钟做个FTP

Server:

import socket,os,hashlib
server=socket.socket()
server.bind(("localhost",9999))#绑定要监听的端口
server.listen()#开始监听
while True:
    conn,addr=server.accept()#等待用户输入命令
    print("newconn",addr)
    while True:
        print("等待新指令")
        data=conn.recv(1024)
        if not data:
            print("客户端断开")
            break
        cmd,filename=data.decode().split()
        print(filename)
        if os.path.isfile(filename):
            f = open(filename,"rb")
            m = hashlib.md5()
            file_size=os.stat(filename).st_size
            conn.send(str(file_size).encode())#send file size
            conn.recv(1024)#wait for ack
            for line in f:
                m.update(line)
                conn.send(line)
            print("file md5",m.hexdigest())
            f.close()
            conn.send(m.hexdigest().encode())#send md5
        print("send done")
server.close()

client:

import socket,os,hashlib
client=socket.socket()
client.connect(("localhost",9999))
while True:
    cmd = input(">>:".strip())
    if len(cmd) ==0:continue
    if cmd.startswith("get"):
        client.send(cmd.encode())
        server_respose=client.recv(1024)#文件大小
        print("server respose",server_respose)
        client.send(b"ready to  recv file")
        file_total_size = int(server_respose.decode())
        received_size=0
        filename=cmd.split()[1]
        f = open(filename+".new","wb")#复制新文件
        m = hashlib.md5()
        while received_size<file_total_size:
            if file_total_size - received_size > 1024:#接收不止一次
                size=1024
            else:#最后一次接收
                size=file_total_size-received_size
                print("last receive",size)
            data=client.recv(size)
            received_size+=len(data)
            m.update(data)
            f.write(data)
    else:
        new_file_md5=m.hexdigest()
        print("file recv done",received_size,file_total_size)
        f.close()
    server_file_md5=client.recv(1024)#最后接收服务器返回的md5
    print("server file md5",server_file_md5)
    print("client file md5",new_file_md5)
client.close
时间: 2024-10-09 01:17:08

Python分享之分分钟做个FTP的相关文章

利用友盟分分钟做分享模块。!

利用友盟分分钟做分享模块.!   app里 有好东西想分享.  怕难?系统自带分享怕麻烦? OK 利用友盟第三方库分分钟写出分享代码--简单粗暴.. 先去友盟网站获取appKey.http://dev.umeng.com/social/ios/share/quick-integration   噗 然后教程都在这里了. =.= 倒入第三方库.加入头文件#import "UMSocial.h" 在AppDelegate.m种的 didFinishLauching里面写入一句话 [UMSo

学习《Python核心编程》做一下知识点提要,方便复习(一)

学习<Python核心编程>做一下知识点提要,方便复习. 计算机语言的本质是什么? a-z.A-Z.符号.数字等等组合成符合语法的字符串.供编译器.解释器翻译. 字母组合后产生各种变化拿python来说就是.keyword.数值,类,函数,运算符,操作符...... 1.变量不用声明,类型不固定 2.True,False = False,True读出了什么?True是个bool()类实例 3.类型工厂函数就是python2.2后把int() bool()等对数据类型操作的函数分装成对象 类 了

分享一个 Excel 做的三国杀 游戏 ,想学EXCEL的绝对受用。

分享一个  Excel 做的三国杀 游戏 ,想学EXCEL的绝对受用. 下载地址: http://www.400gb.com/file/81315129  ,保证无毒.

使用python测试sphinx(coreseek)做全文索引

coreseek是一个基础sphinx的中文索引工具,我今天写一下关于使用python做测试的方式. coreseek安装,连接mysql的配置此处不赘述,很多人写过这方面的博客,单纯讲python连接sphinx.当然我们先启动sphinx进程,./searched python要连接sphinx肯定是需要第三方库的,你可以去pypi找,当然sphinx已经告诉我们了,我们去/home/lpj/soft/coreseek-3.2.14/csft-3.2.14/api (我下载的coreseek

python对时间日期做格式化

python对时间日期做格式化 >>> import datetime >>> dir(datetime) ['MAXYEAR', 'MINYEAR', '__doc__', '__file__', '__name__', '__package__', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'tzinfo'] >>> datetime.datetime.now() datet

python 中对list做减法操作

问题描述:假设我有这样两个list,          一个是list1,list1 = [1, 2, 3, 4, 5]          一个是list2,list2 = [1, 4, 5]           我们如何得到一个新的list,list3,          list3中包括所有不在list2中出现的list1中的元素.          即:list3 = list1 - list2          解决方案:我们可以用set(集合)操作          list3 = l

python主要用来做什么

python这门编程语言在国外极受欢迎,但在国内使用还不是极普遍. 由于python编程效率极高,现在国内的使用者也开始变得越来越多. python主要用来做什么?这个语言到底有哪些作用呢? 下面主是它的应用大全: 系统编程:提供API,能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具,这也是国外为什么使用者这么多的原因,我们国内很少使用Linux. 图形处理:有PIL.Tkinter等图形库支持,能方便进行图形处理. 数学处理:NumPy扩展提供大量与许多标

分享一个我做的质因数分解的kata视频,拍砖请手下留情哈~~

分享一个我做的质因数分解的kata视频,拍砖请手下留情哈~~

python 学习分享-实战篇高级的ftp

#server代码 import socketserver,os,hashlib Base_paht = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/db' class Server_ftp(socketserver.BaseRequestHandler): def handle(self): while 1: try: self.username = self.request.recv(1024).strip(