day10博客

服务端:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# import socketserver
# bufsize = 1024
# host = ‘127.0.0.1‘
# port = 8100
# address = (host,port)
#
# class MYtcphandler(socketserver.BaseRequestHandler):
#     def handle(self):
#         while True:
#             data=self.request.recv(bufsize)
#             if not data:break
#             self.request.sendall(data.upper())
# if __name__ == ‘__main__‘:
#     sever=socketserver.ThreadingTCPServer((address),MYtcphandler)
#     sever.serve_forever()

import socketserver,os,socket

class MYtcphandler(socketserver.BaseRequestHandler):
    def handle(self):
        while True:
             client_data=self.request.recv(bufsize).strip()
             if not client_data: break
             client_data=client_data.split(‘|‘)
             if hasattr(self,client_data[0]):
                 func=getattr(self,client_data[0])
                 func(client_data)
    def filetrans(self,msg):
        print(‘filetrans‘,msg)
        if msg[1] == ‘get‘:
            print(‘client wants to download file‘,msg[2])
            if os.path.isfile(msg[2]):
                file_size=os.path.getsize(msg[2])
                res="ready|%s" %file_size
            else:
                res="file not exit"
            sen_conirmation="filetrans|get|%s" %res
            self.request.send(sen_conirmation)
            feedback=self.request.recv(100)
            if feedback == ‘filetrans|get|recv_ready‘:
                f=open(msg[2],‘rb‘)
                send_size=0
                while not file_size==file_size:
                    if file_size-send_size > 1024:
                        data=f.read(1024)
                        send_size+=1024
                    else:
                        data=f.read(file_size-send_size)
                        send_size+=(file_size-send_size)
                    self.request.send(data)
                    print(file_size,send_size)
                else:
                    print(‘##############send file:%s done‘%msg[2])
        elif msg[1] == ‘put‘:
            print(‘client wants to download file‘,msg[2])
            #sendmessage
            feedback = self.request.recv(100)
            if feedback == ‘filetrans|put|recv_ready‘:
                file_size = int(feedback.split()[-1])
                self.request.send("recv_ready")
                recv_size = 0
                put_file_name = msg[2]
                f = open(os.path.basename(put_file_name), ‘wb‘)
                print(‘#########‘,put_file_name)
                while not file_size == recv_size:
                    if file_size - recv_size > bufsize:
                        data = self.request.recv(bufsize)
                        recv_size += len(data)
                    else:
                        data = self.request.recv(file_size - recv_size)
                        recv_size += (file_size - recv_size)
                    # 接收就写入
                    f.write(data)
                    print(file_size,recv_size)
                print(‘put %sdone‘,put_file_name)

            # put_file_name=msg[2]
            # if os.path.isfile(msg[2]):
            #     print(‘pass‘)
            #     put_size = os.path.getsize(msg[2])
            #     put_conirmation = "filetrans|put|%s" % put_size
            # else:
            #     print(‘faile‘)

            #put_size=os.path.getsize(msg[2])

            #put_conirmation="filetrans|put|%s" %put_size

if __name__ == ‘__main__‘:
    bufsize = 1024
    host = ‘127.0.0.1‘
    port = 8090
    address = (host,port)
    server=socketserver.ThreadingTCPServer((address),MYtcphandler)
    server.serve_forever()

客户端:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socketserver,os,socket
class ftpclient(object):
    def __init__(self,address):
        self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.sock.connect((address))
    def start(self):
        self.useractive()
    def useractive(self):
        while True:
            user_input=input(‘>>:‘).strip()
            if len(user_input)==0:continue
            user_input=user_input.split()
            if hasattr(self,user_input[0]):
                func=getattr(self,user_input[0])
                func(user_input)
            else:
                print(‘wrong cmd usage‘)

    def get(self,msg):
        print(‘##get func###‘,msg)
        if len(msg)==2:
            file_name=msg[1]
            client_data=‘filetrans|get|%s‘ % file_name
            self.sock.send(client_data)
            feedback=self.sock.recv(100)
            print(‘server confirm msg‘,feedback)
            if feedback.startswith(‘filetrans|get|ready‘):
                file_size=int(feedback.split(‘|‘)[-1])
                self.sock.send(‘filetrans|get|recv_ready‘)
                recv_size=0
                f=open(‘client_recv/%s‘ %os.path.basename(file_name),‘wb‘)
                print(‘new file_name‘,file_name)
                while not file_size==recv_size:
                    if file_size-recv_size>bufsize:
                        data=self.sock.recv(bufsize)
                        recv_size+=len(data)
                    else:
                        data=self.sock.recv(file_size-recv_size)
                        recv_size+=(file_size-recv_size)
                    f.write(data)
                    print(file_size,recv_size)
                else:
                    print(‘###########recv file:%s#################‘%file_name)
                    f.close()
            print(feedback)
        else:
            print(‘wrong cmd usage‘)
    def put(self,msg):
        print(‘##put func###‘, msg)
        if len(msg) == 2:
            file_name = msg[1]
            client_data = ‘filetrans|put|%s‘ %file_name
            self.sock.send(client_data.encode(‘utf-8‘))
            feedback = self.sock.recv(100)
            if os.path.isfile(file_name):
                print(‘pass‘)
                file_size=os.path.getsize(file_name)
                res = "ready %s" %file_size
                print(‘########‘,res)
                self.sock.send(res)
                if feedback == ‘recv_ready‘:
                    f=open(file_name,‘wb‘)
                    send_size = 0
                    while not file_size == send_size:
                        if file_size - send_size > 1024:
                            data = f.read(1024)
                            send_size += 1024
                        else:
                            data = f.read(file_size - send_size)
                            send_size += (file_size - send_size)
                            print(file_size,send_size)
                        self.sock.send(data)
                    else:
                        print(‘##########send file:%s done############‘ %file_name)
                        f.close()
            else:
                print(‘faile‘)
                res="file doesn‘s exist"
                print(‘##########‘,res)
                self.sock.send(res)

    def ls(self):
        pass
    def cd(self):
        pass
    def delete(self):
        pass

if __name__ == ‘__main__‘:
    bufsize = 1024
    host = ‘127.0.0.1‘
    port = 8090
    address = (host,port)
    p=ftpclient(address)
    p.start()
时间: 2024-10-13 22:20:01

day10博客的相关文章

从入门到放弃,.net构建博客系统(一):系统构建篇

demo:http://tonyblogs.top/ Git源码:https://github.com/Halifa/TonyBlogs 项目采用的技术有:asp.net mvc4 + autofac + ormlite + mysql + metronic + jquery.datatable + vue 一.项目分层 1. TonyBlogs.Framework,主要实现了框架的依赖注入,定义了依赖的生命周期 2. TonyBlogs.Entity,主要是数据表的实体对象,以Entity为后

Android ListView工作原理完全解析(转自 郭霖老师博客)

原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况.ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了. 另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到

团队作业6——展示博客(Alpha版本)

团队成员的简介和个人博客地址,团队的源码仓库地址. 代泽旭:平时做事认真负责,组织能力强,擅长C#.C++等多门语言,,此次学习了PHP语言.微信接口等新技能,负责总体任务分配,开发微信接口. 林至贤:相信坚持了就一定能成功,代码领略能力高,擅长JAVA,C++等,为人谦虚谨慎,做事低调,有着崇高的艺术追求,对编程有着一定的自我理解. 王李焕:编程能力较好,为人诚实友善,不爱张扬,擅长JAVA.C++等语言编程,对网页制作也有一定了解,对编程有着浓厚的兴趣. 童毅南:自己爱动手,动手能力强,编程

第1篇博客

注册5年了 在这个初期对我提供帮助最大的网站 我却直到今天才写博客 是有点晚了 今天原本想在csdn上创建博客的 因为csdn的百度指数是51cto的5倍不止 它的火热是无容置疑的 但是那里是程序员的天下 国内网络工程师或运维工程师的大本营还是51cto. 本人勉强算80后,奔三十了,网络工程师出身,自学,cisco入门 huawei/h3c/linux就业,经历过小公司大公司,目前在一个国内一个日落西山的通信设备厂商工作,企业市场占有率第一或第二,薪资在IT行业里应该是垫底的队列. 以后我会不

【集美大学1411_助教博客】2017软件工程开跑啦。。。

一.自我介绍 各位同学大家好,我是各位同学本学期软件工程这门课的助教,我叫郑蕊,现工作于吉林省长春市.很荣幸能再一次为<构建之法>担当助教,在之前担当助教的过程中,我已经获益良多,在此还是要感谢周老师和邹老师,感谢两位老师给我树立的优秀榜样,也感谢两位老师对我的教导和引导.很高兴这次能担当集美大学软工课的助教,在15年冬,我曾去过集美大学,那真的是一所风景非常优美的院校,从暴雪的东北到达绿意盎然的夏门,在集美大学的校园中漫步真是一件让人享受的事.希望本学期能和集美大学的同学们共同探讨软件工程,

delphi 移动开发博客地址收集

这个是各位博主学习整理的笔记,很值得大家学习. XE2011的博客: http://www.cnblogs.com/xe2011/ 万一的博客:http://www.cnblogs.com/del/ 武稀松的博客:http://www.raysoftware.cn/ delphiteacher的博客:http://blog.csdn.net/DelphiTeacher 我一路走来的博客:http://blog.csdn.net/tingsking18/article/details/477210

windows上使用mkdocs搭建静态博客

windows上使用mkdocs搭建静态博客 之前尝试过用HEXO搭建静态博客,最近发现有个叫mkdocs的开源项目也是搭建静态博客的好选择,而且它支持markdown格式,下面简要介绍一下mkdocs的环境搭建过程 项目地址:https://github.com/mkdocs/mkdocs 介绍:英文版----http://www.mkdocs.org/ 中文版----http://markdown-docs-zh.readthedocs.io/zh_CN/latest/ 使用环境:win8.

MetaWeblog博客客户端工具之Windows Live Writer

吐槽&注意的坑: 刚听说了有这么一个东西,据说Windows Live Writer开源之后就改名为Open Live Writer,我以为Open Live Writer就要比Windows Live Writer要好于是就去下了Open Live Writer,然而我还是native了- 我说我装个插件吧,去官网一看,据说九个月没更新了,娘的coming了九个月-! 中英文这种问题就不吐槽了,按照网上的办法Open Live Writer安装插件根本装不上,因为默认安装的时候没有让选择安装目

Django1.9开发博客(12)- i18n国际化

国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指定他们哪些app应该被翻译或被格式化为本地形式. 允许用户根据自己的偏好来实现本地化显示.翻译依据语言,格式化依据国家, 这些信息由浏览器中的Accept-Language头来决定.不过目前为止时区还未能实现. 参考官方文档:https://docs.djangoproject.com/en/1.9