羅良夫 張麗
摘要:Python是目前較流行的程序設(shè)計(jì)語(yǔ)言之一,它具有簡(jiǎn)單易學(xué)代碼簡(jiǎn)潔等特點(diǎn),并且Python提供了大量的功能庫(kù)文件,開(kāi)發(fā)大型應(yīng)用程序時(shí)非常方便,廣泛用于網(wǎng)站開(kāi)發(fā)、游戲后臺(tái)開(kāi)發(fā)等方面。該文基于Python提供的網(wǎng)絡(luò)編程庫(kù),開(kāi)發(fā)了網(wǎng)絡(luò)文件傳輸?shù)墓δ?,該功能可以快速有效地在互?lián)網(wǎng)上進(jìn)行文件的傳輸。
關(guān)鍵詞:Python;網(wǎng)絡(luò)編程;文件傳輸
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)33-0072-02
Abstract: Python is currently one of the more popular programming language, it has the characteristics of easy to learn the code concise, Python provides a number of utility libraries, developing large when the application is very convenient, is widely used in web development, the game background, etc. Based on the network programming library provided by Python, this paper develops the function of network transmission files, which can quickly and effectively transmit files on the Internet.
Key words: Python; network programming; file transfer
1 Python介紹
Python是由Guido van Rossum在1989年底創(chuàng)造的,在1991年發(fā)行了第一個(gè)公開(kāi)版本。Python是一種面向?qū)ο蟮?、解釋型的、?dòng)態(tài)數(shù)據(jù)類型的程序設(shè)計(jì)語(yǔ)言。Python的代碼具有很高的可讀性,關(guān)鍵詞較少且代碼結(jié)構(gòu)簡(jiǎn)潔易懂,在完成同一個(gè)任務(wù)時(shí),C語(yǔ)言要寫(xiě)1000行代碼,Java只需要寫(xiě)100行,而Python可能只要20行。
Python一般用來(lái)完成日常任務(wù),比如自動(dòng)備份你的MP3等,也可以用來(lái)做網(wǎng)站,還可以用來(lái)做網(wǎng)絡(luò)游戲的后臺(tái)。Python為我們提供了非常完善的各種功能庫(kù),覆蓋了網(wǎng)絡(luò)、文件、GUI、數(shù)據(jù)庫(kù)、文本等大量?jī)?nèi)容,被形象地稱作“內(nèi)置電池(batteries included)”。Python開(kāi)發(fā)的過(guò)程中,許多功能不必從零編寫(xiě),直接使用現(xiàn)成的即可。Python的應(yīng)用十分廣泛,比如YouTube、Instagram、國(guó)內(nèi)的豆瓣網(wǎng)站就是用Python開(kāi)發(fā)的,而且許多大公司,包括Google、Yahoo、NASA(美國(guó)航空航天局)等都大量地使用Python。
2 Python網(wǎng)絡(luò)編程介紹
Python網(wǎng)絡(luò)編程是基于Socket進(jìn)行開(kāi)發(fā)的,Socket又稱"套接字",應(yīng)用程序通過(guò)Socket"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求,使主機(jī)間或者一臺(tái)計(jì)算機(jī)上的進(jìn)程間可以通訊。
Python 提供了兩個(gè)級(jí)別的網(wǎng)絡(luò)訪問(wèn)服務(wù):一個(gè)是支持基本的 Socket的低級(jí)別的網(wǎng)絡(luò)服務(wù),它提供了標(biāo)準(zhǔn)的 BSD Sockets API,可以訪問(wèn)底層操作系統(tǒng)Socket接口的全部方法;另一個(gè)是高級(jí)別的網(wǎng)絡(luò)服務(wù)模塊 SocketServer,它提供了服務(wù)器的中心類,可以簡(jiǎn)化網(wǎng)絡(luò)服務(wù)的開(kāi)發(fā)。
3 Python網(wǎng)絡(luò)編程的常用功能
3.1 建立套接字
服務(wù)器與客戶在網(wǎng)絡(luò)通信前需要先建立套接字,具體語(yǔ)法如下:
s=socket.socket(套接字家族, 套接字類型, 網(wǎng)絡(luò)協(xié)議)
3.2 服務(wù)器綁定地址
服務(wù)器建立套接字后,首先綁定地址到套接字上,具體語(yǔ)法如下:
s.bind(主機(jī)名,端口號(hào))
3.3 服務(wù)器監(jiān)聽(tīng)
服務(wù)器端綁定地址后,需要監(jiān)聽(tīng)客戶端請(qǐng)求,具體語(yǔ)法如下:
s.listen(最大連接數(shù)量)
3.4 服務(wù)器接受客戶端請(qǐng)求
服務(wù)器處于監(jiān)聽(tīng)狀態(tài)時(shí),客戶端發(fā)送請(qǐng)求后需要接受請(qǐng)求,具體語(yǔ)法如下:
s.accept()
3.5 客戶端發(fā)起連接請(qǐng)求
客戶端建立套接字后,需要向服務(wù)器端發(fā)起連接請(qǐng)求,具體語(yǔ)法如下
s.connect(主機(jī)名,端口號(hào))
4 Python網(wǎng)絡(luò)傳輸文件功能的設(shè)計(jì)與實(shí)現(xiàn)
Python文件傳輸功能采用C/S結(jié)構(gòu),首先對(duì)服務(wù)器端套接字進(jìn)行綁定地址監(jiān)聽(tīng)等操作,然后客戶端套接字發(fā)起連接請(qǐng)求后,服務(wù)器接受請(qǐng)求并獲取文件名及大小等信息,然后接受文件數(shù)據(jù)到指定地址完成傳輸,如圖1所示,具體實(shí)現(xiàn)代碼如下:
服務(wù)器端:
import socket
import time
s=socket.socket()
host=socket.gethostname()
port=3245
s.bind((host,port))
s.listen(5)
while True:
fname=raw_input('請(qǐng)輸入文件名:')
file=open(fname,'w')
c,addr=s.accept()
print '客戶端連接成功,連接地址:',addr
c.send('服務(wù)器連接成功!')
time.sleep(0.2)
len=c.recv(10)
print len
time.sleep(0.5)
len=int(len)
content=c.recv(len)
file.write(content)
file.close()
str=raw_input('是否繼續(xù)接收文件:(y/n):')
if str.lower()=='y':
c, addr = s.accept() # 建立客戶端連接。
else:
Break
客戶端:
import socket
import os
import time
s=socket.socket()
host=socket.gethostname()
port=3245
s.connect((host,port))
while True:
print s.recv(1024)
file=open('test.txt','r')
fLen=os.path.getsize('test.txt')
s.send(str(fLen))
content=file.read(fLen)
time.sleep(2)
s.send(content)
file.close()
str=raw_input('是否繼續(xù)發(fā)送文件:(y/n):')
if str.lower()=='n':
Break
5 結(jié)束語(yǔ)
Python語(yǔ)言是目前較流行的程序設(shè)計(jì)語(yǔ)言之一,它具有語(yǔ)法簡(jiǎn)潔關(guān)鍵詞少等特點(diǎn),簡(jiǎn)單易學(xué)且功能強(qiáng)大。本文采用Python提供的Socket功能,實(shí)現(xiàn)了網(wǎng)絡(luò)傳輸文件的功能,該功能實(shí)現(xiàn)了通過(guò)互聯(lián)網(wǎng)進(jìn)行文件傳輸?shù)墓δ?,理論上文件長(zhǎng)度沒(méi)有限制,且執(zhí)行的效率較高。
參考文獻(xiàn):
[1] 羅霄, 任勇. 基于Python的混合語(yǔ)言編程及其實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件, 2004(12):17-18.
[2] 齊鵬. 基于Python的Web數(shù)據(jù)采集技術(shù)[J].電子科技,2012(11):118-120.
[3] 周中華. 基于Python的新浪微博數(shù)據(jù)爬蟲(chóng)[J].計(jì)算機(jī)應(yīng)用, 2014(11):3131-3134.
[4] 鄺洪勝.基于Python的電商導(dǎo)購(gòu)APP設(shè)計(jì)與實(shí)現(xiàn)[D]. 廣州: 華南理工大學(xué), 2015(12):62.