2018-09-13 網(wǎng)絡(luò)編程

Python是一個(gè)很強(qiáng)大的網(wǎng)絡(luò)編程工具

一光坝、python內(nèi)有很多針對(duì)常見網(wǎng)絡(luò)協(xié)議的庫(kù),對(duì)網(wǎng)絡(luò)協(xié)議的各個(gè)層次進(jìn)行了抽象封裝洲赵,因此使用python編寫程序不必關(guān)心網(wǎng)絡(luò)實(shí)現(xiàn)的細(xì)節(jié)

二叠萍、python非常善于處理字節(jié)流的各種模式苛谷,使用python可以很容易地寫出處理各種協(xié)議格式的代碼

(1)urllib和urllib2

互聯(lián)網(wǎng)基本原理是基于“請(qǐng)求-響應(yīng)”模式腹殿,獲取互聯(lián)網(wǎng)上的資源需要發(fā)出請(qǐng)求,即URL? (地址)

Python中實(shí)現(xiàn)的urllib和urllib2刻炒,功能很強(qiáng)大坟奥,通過它們?cè)L問網(wǎng)絡(luò)上的文件爱谁,就像訪問本地電腦的文件一樣兩個(gè)模塊的功能都差不多访敌,但urllib2更好一些

如果只需要簡(jiǎn)單的下載邪媳,使用urllib就能夠滿足要求如果需要使用HTTP驗(yàn)證或cookie或要為自己的協(xié)議編寫擴(kuò)展程序的話雨效,urllib2是更好的選擇

使用urllib.request模塊下載文件,使用urlretrieve()方法

語(yǔ)法:

urlretrieve(url,[filename,reporthook])

參數(shù)url代表資源路徑

參數(shù)filename指定本地保存路徑

參數(shù)reporthook是一個(gè)回調(diào)函數(shù)叮姑,當(dāng)連接上服務(wù)器传透、以及相應(yīng)的數(shù)據(jù)庫(kù)傳輸完畢時(shí)會(huì)觸發(fā)回調(diào)极颓,可以利用來顯示下載進(jìn)度

使用urllib2可以像打開本地文件一樣打開遠(yuǎn)程文件菠隆,不同之處是只能使用只讀模式

打開遠(yuǎn)程文件使用的方法是urlopen(),傳遞給它的參數(shù)是URL

urlopen()返回一個(gè)能從中讀取數(shù)據(jù)的類文件對(duì)象躯肌,支持多種方法:read清女、readline嫡丙、readlines、close

練習(xí):根據(jù)中國(guó)天氣網(wǎng)(www.weather.com.cn)提供的查詢接口來獲取天氣信息

例子:http://www.weather.com.cn/data/cityinfo/101010100.html 查詢北京市天氣信息

中國(guó)天氣網(wǎng)城市代碼:

利用中國(guó)天氣網(wǎng)提供的接口,能夠獲取到對(duì)應(yīng)城市的天氣信息

獲取到的信息結(jié)構(gòu)類似一個(gè)有兩層的字典

最外層只有一個(gè)鍵“weatherinfo”,它的值是另外一個(gè)字典尘吗,里面包含了很多天氣信息

這種數(shù)據(jù)結(jié)構(gòu)被稱為“json格式”

Json是一種輕量級(jí)的數(shù)據(jù)交換格式,是一種完全獨(dú)立于語(yǔ)言的文本格式黔宛,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C臀晃、C++徽惋、C#险绘、Java宦棺、Python等)代咸,這些特性使json成為了理想的數(shù)據(jù)交換語(yǔ)言

Python標(biāo)準(zhǔn)庫(kù)中也包含了json模塊侣背,模塊中的一些方法能幫助更好的處理這種json格式的數(shù)據(jù),例如通過loads方法就能將json數(shù)據(jù)轉(zhuǎn)換成真正的字典


(2)socket

套接字(socket)是網(wǎng)絡(luò)編程中的一個(gè)基本組件,是兩個(gè)端點(diǎn)的程序之間的“信息通道

套接字包括兩個(gè):服務(wù)器套接字和客戶端套接字

無論是服務(wù)器還是客戶端潮太,都首先需要調(diào)用socket模塊中的socket()方法來創(chuàng)建socket對(duì)象

socket()方法的格式:socket(family铡买,type)

Family 參數(shù)代表地址家族霎箍,可以是AF_INET或AF_UNIX漂坏,AF_INET 代表IPv4地址谷徙,AF_UNIX只能用于單一的Unix系統(tǒng)進(jìn)程間通信

type參數(shù)代表套接字類型完慧,可以是SOCK_STREAM或SOCK_DGRAM剩失,SOCK_STREAM代表流套接字拴孤,應(yīng)用于TCP涨椒,SOCK_DGRAM代表數(shù)據(jù)報(bào)套接字绽媒,應(yīng)用于UDP

流套接字和數(shù)據(jù)報(bào)套接字的區(qū)別:

1、流套接字區(qū)分服務(wù)器和客戶端囤热,數(shù)據(jù)報(bào)套接字不區(qū)分

2旁蔼、流套接字適合傳輸數(shù)據(jù)量大的棺聊,數(shù)據(jù)報(bào)套接字適合傳輸數(shù)據(jù)量小的

3、客戶的流套接字單向傳遞限佩,數(shù)據(jù)報(bào)套接字可以接收任何方向的數(shù)據(jù)葵诈,并可以向任何地址發(fā)送數(shù)據(jù)報(bào)

4、流套接字使用時(shí)不需考慮底層細(xì)節(jié)祟同,依靠TCP協(xié)議進(jìn)行可靠的數(shù)據(jù)傳輸數(shù)據(jù)報(bào)套接字依靠UDP協(xié)議作喘,數(shù)據(jù)傳輸效率高,但需要考慮底層細(xì)節(jié)晕城,在代碼中保證數(shù)據(jù)的可靠傳輸

5泞坦、流套接字依靠TCP協(xié)議建立好連接后發(fā)送數(shù)據(jù),不需要指定地址數(shù)據(jù)報(bào)套接字依靠UDP協(xié)議發(fā)送數(shù)據(jù)砖顷,每次都需要指定發(fā)送給誰(shuí)

?服務(wù)器socket函數(shù):

bind(address)方法將套接字綁定到地址贰锁,參數(shù)address以元組(host,port)的形似表示地址

listen(backlog)方法開始監(jiān)聽TCP傳入連接择吊,參數(shù)backlog為操作系統(tǒng)可以掛起的最大連接數(shù)李根,至少為1-5

accept()方法接收TCP連接并返回元組(conn囱持,address),conn是新的socket對(duì)象掩幢,服務(wù)器必須通過它與客戶通信世曾,address是客戶的地址

客戶端socket函數(shù):

connect(address)方法連接到指定地址的套接字,參數(shù)address格式為元組(host,port)地址

connect_ex(address)方法與connect()方法相同,但是成功返回0,失敗返回errno

公共socket函數(shù):

recv(bufsize)接收TCP數(shù)據(jù)京办,參數(shù)bufsize指定接收的最大數(shù)據(jù)量,結(jié)果以字符串形式返回

send(string)發(fā)送TCP數(shù)據(jù),參數(shù)string是字符串,返回值是要發(fā)送的數(shù)據(jù)量

sendall(string)完整發(fā)送TCP數(shù)據(jù),在返回之前會(huì)嘗試發(fā)送所有數(shù)據(jù)

recvfrom(bufsize)接收UDP數(shù)據(jù),返回值是(data,address),address指明發(fā)送方地址

sendto(string,address)發(fā)送UDP數(shù)據(jù),參數(shù)中也需指明address(接收方地址)

settimeout(timeout)設(shè)置套接字操作的超時(shí)時(shí)間,參數(shù)timeout是浮點(diǎn)數(shù)炫狱,單位為秒

close()關(guān)閉套接字

編寫服務(wù)端socket思路:

1、創(chuàng)建套接字,綁定套接字到本地IP和端口

2、開始監(jiān)聽連接

3、進(jìn)入循環(huán),不斷接收客戶端的請(qǐng)求

4、接收傳來的數(shù)據(jù)布讹,并發(fā)送給對(duì)方數(shù)據(jù)

5膘流、傳輸完畢后,關(guān)閉套接字

編寫客戶端socket思路:

1考润、創(chuàng)建套接字罚舱,連接服務(wù)器地址

2阿逃、連接后發(fā)送和接收數(shù)據(jù)

3肪跋、傳輸完畢后州既,關(guān)閉套接字

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚌卤,一起剝皮案震驚了整個(gè)濱河市实束,隨后出現(xiàn)的幾起案子咸灿,更是在濱河造成了極大的恐慌审胸,老刑警劉巖尺上,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胚委,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)叉信,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門亩冬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茉盏,你說我怎么就攤上這事鉴未。” “怎么了鸠姨?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵铜秆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我讶迁,道長(zhǎng)连茧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮啸驯,結(jié)果婚禮上客扎,老公的妹妹穿的比我還像新娘。我一直安慰自己罚斗,他們只是感情好徙鱼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著针姿,像睡著了一般袱吆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上距淫,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天绞绒,我揣著相機(jī)與錄音,去河邊找鬼榕暇。 笑死蓬衡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彤枢。 我是一名探鬼主播狰晚,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缴啡!你這毒婦竟也來了家肯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盟猖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后酒来,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體输钩,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玉凯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娘汞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夕玩,死狀恐怖你弦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燎孟,我是刑警寧澤禽作,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站揩页,受9級(jí)特大地震影響旷偿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一萍程、第九天 我趴在偏房一處隱蔽的房頂上張望幢妄。 院中可真熱鬧,春花似錦茫负、人聲如沸蕉鸳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潮尝。三九已至,卻和暖如春缔赠,著一層夾襖步出監(jiān)牢的瞬間衍锚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工嗤堰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戴质,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓踢匣,卻偏偏與公主長(zhǎng)得像告匠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子离唬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 文章首發(fā)于個(gè)人blog歡迎指正補(bǔ)充后专,可聯(lián)系lionsom_lin@qq.com原文地址:《網(wǎng)絡(luò)是怎樣連接的》閱讀整...
    lionsom_lin閱讀 14,124評(píng)論 6 31
  • 引言 網(wǎng)絡(luò)學(xué)習(xí)的核心內(nèi)容就是網(wǎng)絡(luò)協(xié)議的學(xué)習(xí) 網(wǎng)絡(luò)協(xié)議:網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或者說是約定的集合因?yàn)椴?..
    _涼風(fēng)_閱讀 1,974評(píng)論 8 22
  • 01感觸 今天付費(fèi)在【得到】上訂閱了李笑來老師的專欄《通往財(cái)富自由之路》,幾篇文章看下來嫂用,感觸頗深型凳。在此之前我看了...
    安悅微閱讀 427評(píng)論 6 4
  • 午加餐:葡萄干瓜子仁小餅晚水果:藍(lán)莓西瓜荔枝 參考目標(biāo): 1份肉2份豆制品3份“新鮮”水果4份谷物/薯5份蔬菜,深...
    靜趣_兒童心理師閱讀 285評(píng)論 0 0
  • 我嘱函,一個(gè)叫做靜靜地普羅大眾甘畅,身高就差那么一丟丟到一米六了,眼睛小但是對(duì)稱呀往弓,鼻子塌但是小巧呀疏唾,牙齒不整齊但是白呀...
    小米粒加巧克力閱讀 406評(píng)論 0 6