好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python网络客户端

Python网络客户端

什么是网络客户端?

首先,我们把因特网简化成一个数据中心,数据交换的参与者是一个服务提供者和一个服务使用者。类似于“生产者-消费者”这里 服务器就是生产者,它提供服务,一般只有一个服务器喝多个消费者,就像我们之前看道德客户端/服务器模型那样。

这里主要介绍三个网际协议---FTP、NNTP和POP3

文件传输协议--FTP

FTP是internet上文件传输、软件和源代码下载的主要手段之一。FTP要求输入用户名和密码才能访问FTP服务器,但它也允许没有帐号的用户以匿名用户登录(当然这需要管理员设置FTP服务器允许匿名用户登录)。这时用户名是匿名(anonymous),密码是一般是用户的电子邮件地址。

FTP工作流程如下

客户端链接远程FTP服务器 客户端输入用户名和密码 客户端做各种文件传输和信息查询 客户端登出远程FTP服务器,结束通讯

有时由于网络原因 会导致事务在完成之前中断。客户端在超过900秒不活动后连接就会被关闭。

在底层,FTP使用TCP 而不是UDP。并且客户端和服务器都使用两个套接字来通讯:一个控制和命令端口(21号端口),一个数据端口(20号端口).。

FTP有两种模式:主动和被动(Python同时支持主动被动两种模式)。只有主动模式服务器才使用数据端口。而被动模式中服务器只告诉客户端他的随即端口号码,客户端必须主动建立数据链接。

 

Python 和 FTP

在使用Python的FTP支持时,需要导入ftplib模块,并实例化一个ftplib.FTP类对象

ftplib.FTP类方法

  方法 属性 login([user[, passwd[, acct]]])

登录到FTP服务器,所有参数都是可选的

pwd() 得到当前工作目录 cwd(pathname) 把当前工作目录设置为pathname dir(argument[, ...[,cb]·]) 显示参数目录的内容,可选参数cb是一个回调函数他会被传给retrlines()方法 nlst(argument[, ...]) 与dir 类似 但返回一个文件名列表 而不是显示这些文件 retrlines(command[, callback]) 给定FTP命令 用于下载文本文件 可选的会小函数用于处理每一块下载的数据(每块默认为为8k) retrbinary(command, callback[, maxblocksize[, rest]]) 与上一个类似 但这个指令处理二进制文件 storlines(command, file[, callback]) 给定FTP命令,用于上传文件 要给定一个文件对象file storbinary(command, file[, blocksize, callback, rest]) 与上一个类似 只是这个处理二进制文件 要给定文件对象 上传块大小默认8k rename(fromname, toname) 修改文件名 delete(filename) 删除远程文件 mkd(pathname) 创建远程目录 rmd(dirname) 删除远程目录 quit() 关闭链接并断开

内容参见  http://docs.python.org/library/ftplib.html

Python使用FTP流程为

 from  ftplib  import   FTP
f  = FTP( '  ftp.python.org  '  )
f.login(  '  anonymous  ' , '  guess@who.org  '  )
:
f.quit() 

下面我们写一段代码,假设你要从mozilla网站上下载最新的

 bugzilla-3.6.9-to-3.6.10-nodocs.diff.gz 代码 

代码示例

 #  !/usr/bin/python  
#   -*- coding: utf-8 -*- 

 import   ftplib
  import   os
  import   socket

HOST  =  '  ftp.mozilla.org  '  
DIRN  =  '  pub/mozilla.org/webtools  '  
FILE  =  '  bugzilla-3.6.9-to-3.6.10-nodocs.diff.gz  ' 

 def   writedata(data):
    f  = open(FILE, '  wb  '  )
      try  :
        f.write(data)
      finally  :
        f.close()

  def   main():
      try  :
        f  =  ftplib.FTP(HOST)
      except   (socket.error, socket.gaierror):
          print   '  ERROR:cannot reach " %s"  '  %  HOST
          return 
     print   '  ***Connected to host "%s"  '  %  HOST

      try  :
        f.login()
      except   ftplib.error_perm:
          print   '  ERROR: cannot login anonymously  '  
        f.quit()
          return 
     print   '  *** Logged in as "anonymously"  '  

     try  :
        f.cwd(DIRN)
      except   ftplib.error_perm:
          print   '  ERRORL cannot CD to "%s"  '  %  DIRN
        f.quit()
          return 
     print   '  *** Changed to "%s" folder  '  %  DIRN

      try  :
          #  传一个回调函数给retrbinary() 它在每接收一个二进制数据时都会被调用 
        f.retrbinary( '  RETR %s  '  % FILE, writedata)
      except   ftplib.error_perm:
          print   '  ERROR: cannot read file "%s"  '  % FILE
        os.unlink(FILE)   #由于某些原因无法保存这个文件时 要把空文件删掉
       else  :
          print   '  *** Downloaded "%s" to CWD  '  %  FILE
    
    f.quit()
      return 

 if   __name__  ==  '  __main__  '  :
    main() 

运行代码将输出一下内容 并将

 bugzilla-3.6.9-to-3.6.10-nodocs.diff.gz 下载到电脑 

***Connected to host  "  ftp.mozilla.org  " 
*** Logged  in  as  "  anonymously  " 
*** Changed to  "  pub/mozilla.org/webtools  "   folder
 *** Downloaded  "  bugzilla-3.6.9-to-3.6.10-nodocs.diff.gz  "  to CWD


作者: GoodSpeed Cheng  
出处: http://www.cnblogs.com/cacique/  
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Python网络客户端的详细内容...

  阅读:51次