日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python编写ftp客户端_用Python写FTP客户端程序

發(fā)布時(shí)間:2024/10/8 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python编写ftp客户端_用Python写FTP客户端程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0 前言:

ftp客戶端相信大家都用過(guò),那么我們?yōu)槭裁催€要用Python寫ftp客戶端呢?

我想有兩個(gè)原因:

一是寫出更好的ftp客戶端應(yīng)用程序,方便大家使用;

二是定制一些特殊服務(wù),例如每天定時(shí)下載/上傳某文件;

我還沒(méi)能力也沒(méi)時(shí)間寫出ftp客戶端應(yīng)用程序,前期先分析一下python寫ftp客戶端的核心部分,即實(shí)現(xiàn)上傳和下載的關(guān)鍵部分。

首先看一下ftp服務(wù)器/客戶端架構(gòu):

1 FTP服務(wù)器/客戶端

ftp架構(gòu)

上圖展示了ftp的工作流程:

1.客戶端連接遠(yuǎn)程主機(jī)上的FTP 服務(wù)器。

2.客戶端輸入用戶名和密碼(或“anonymous”和電子郵件地址)。

3.客戶端進(jìn)行各種文件傳輸和信息查詢操作。

4.客戶端從遠(yuǎn)程FTP 服務(wù)器退出,結(jié)束傳輸。

下面是一段Python偽代碼。from?ftplib?import?FTP

f?=?FTP('some.ftp.server')

f.login('anonymous',?'your@email.address')

:

f.?quit()

當(dāng)然,這只是一般情況下的流程。有時(shí),由于網(wǎng)絡(luò)兩邊計(jì)算機(jī)的崩潰或網(wǎng)絡(luò)的問(wèn)題,會(huì)導(dǎo)致整個(gè)傳輸在完成之前就中斷。

如果客戶端超過(guò)15 分鐘(900 秒)還沒(méi)有響應(yīng),FTP 連接就會(huì)超時(shí)并中斷。

在底層,FTP 只使用TCP,而不使用UDP。

另外,可以將FTP 看作客戶端/服務(wù)器編程中的特殊情況。因?yàn)檫@里的客戶端和服務(wù)器都使用兩個(gè)套接字來(lái)通信:

一個(gè)是控制和命令端口(21 號(hào)端口),另一個(gè)是數(shù)據(jù)端口(有時(shí)是20 號(hào)端口),如上圖 所示。

FTP 有兩種模式:主動(dòng)和被動(dòng)。只有在主動(dòng)模式下服務(wù)器才使用數(shù)據(jù)端口。

在服務(wù)器把20 號(hào)端口設(shè)置為數(shù)據(jù)端口后,它“主動(dòng)”連接客戶端的數(shù)據(jù)端口。而在被動(dòng)模式下,服務(wù)器只是告訴客戶端隨機(jī)的數(shù)據(jù)端口號(hào),客戶端必須主動(dòng)建立數(shù)據(jù)連接。

2 客戶端FTP 程序示例#!/usr/bin/env?python#?coding=utf-8import?ftplib

import?os

import?socket

import?pdb

HOST?=?'ftp.debian.org'DIRN?=?'debian/tools'FILE?=?'loadlin.exe'def?main():????try:

f?=?ftplib.FTP(HOST)

except?(socket.error,?socket.gaierror)?as?e:????????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?"anonymous"'

try:

f.cwd(DIRN)

except?ftplib.error_perm:????????print?'ERROR:?cannot?CD?to?"%s"'?%?DIRN

f.quit()????????return

print?'***??changed?to?"%s"?folder'?%?DIRN????try:

f.retrbinary('RETR?%s'?%?FILE,

open(FILE,'wb').write)

except?ftplib.error_perm:????????print?'ERROR:?cannot?read?file?"%s"'?%?FILE

os.unlink(FILE)????else:????????print?'***?Download?"%s"?to?CWD'?%FILE

f.quit()if?__name__?==?'__main__':

main()

運(yùn)行結(jié)果:

ftp客戶端運(yùn)行結(jié)果:可以看出loadlin.exe文件被更新了。

3 疑問(wèn)

上面編寫的客戶端代碼對(duì)ftp.debian.org站點(diǎn)可以正常連接,為什么有的ftp服務(wù)器明明可以ping通卻無(wú)法連接?

ping ftp.python.org

然而,卻無(wú)法連接到服務(wù)器:

無(wú)法連接ftp.python.org

請(qǐng)高人指點(diǎn)!!謝謝!!

作者:rebirth_2017

鏈接:https://www.jianshu.com/p/bb8207a1ff75

總結(jié)

以上是生活随笔為你收集整理的python编写ftp客户端_用Python写FTP客户端程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。