Socketserver 를 이용 하여 간단 한 파일 업로드 실현

Socketserver 를 이용 하여 간단 한 파일 업로드 실현
server.py
#!/usr/bin/env python
#coding:utf-8
import SocketServer
import os
class MyServer(SocketServer.BaseRequestHandler):
    def handle(self):
        base_path = 'C:/temp'
        conn = self.request        
        print 'connected...'
        while True:
            pre_data = conn.recv(1024)            
            #      、   、    
            cmd,file_name,file_size = pre_data.split('|')            
            #         
            recv_size = 0
            #        
            file_dir = os.path.join(base_path,file_name)
            f = file(file_dir,'wb')
            Flag = True
            while Flag:                
            #     ,
                if int(file_size)>recv_size:                    
                #    1024,       1024
                    data = conn.recv(1024)
                    recv_size+=len(data)                
                    #    ,     
                else:
                    recv_size = 0
                    Flag = False
                    continue
                #    
                f.write(data)            
            print 'upload successed.'
            f.close()
if __name__ == '__main__':
    instance = SocketServer.ThreadingTCPServer(('127.0.0.1',9999),MyServer)
    instance.serve_forever()

client.py
#!/usr/bin/env python
# coding:utf-8
__author__ = 'aolens'
import socket
import sys
import os

ip_port = ('127.0.0.1',9999)
s = socket.socket()
s.connect(ip_port)

container = {'key':'','data':''}
while True:
    input = raw_input('path:')
    cmd,path = input.split('|')
    file_name = os.path.basename(path)
    file_size=os.stat(path).st_size
    s.send(cmd+"|"+file_name+'|'+str(file_size))
    send_size = 0
    f= file(path,'rb')
    Flag = True
    while Flag:        
        if send_size + 1024 >file_size:
            data = f.read(file_size-send_size)
            Flag = False
        else:
            data = f.read(1024)
            send_size+=1024
        s.send(data)
    f.close()

s.close()

클 라 이언 트 출력 path 의 형식 은: 방법 | 경로
path:PUT|C:/oem8.log

업로드 파일 경로 보기 C:/temp 에서 하나 oem8.log 파일 이 있 는 것 을 발 견 했 습 니 다. 업로드 에 성 공 했 습 니 다.

좋은 웹페이지 즐겨찾기