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()

 

posted @ 2017-07-08 11:52  Bruce.yin  阅读(137)  评论(0编辑  收藏  举报