




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
口令:RAPID708第10章
網(wǎng)絡(luò)編程學(xué)習(xí)目標(biāo)熟悉Python常用的網(wǎng)絡(luò)模塊。掌握UDP協(xié)議網(wǎng)絡(luò)編程。掌握TCP協(xié)議網(wǎng)絡(luò)編程。Python網(wǎng)絡(luò)編程Python是一種強(qiáng)大的網(wǎng)絡(luò)編程語(yǔ)言,因?yàn)樗鼘?duì)各層網(wǎng)絡(luò)協(xié)議進(jìn)行封裝,所以只需要處理好程序上的設(shè)計(jì),不需要關(guān)心網(wǎng)絡(luò)通信的具體細(xì)節(jié),使用時(shí)直接調(diào)用相對(duì)應(yīng)的類即可。Python語(yǔ)言非常擅長(zhǎng)字節(jié)流和各種模式的處理,使用Python語(yǔ)言方便程序設(shè)計(jì)時(shí)各種網(wǎng)絡(luò)協(xié)議格式的處理。由于Python語(yǔ)言的網(wǎng)絡(luò)處理工具太過豐富,所以本章節(jié)主要講解當(dāng)前今常用的“socket模塊”、“urllib模塊”和“urllib2模塊”網(wǎng)絡(luò)設(shè)計(jì)模塊。Socket模塊“socket”模塊也叫做嵌套字模塊,嵌套字是雙向通信信道的端點(diǎn),套接字可以在一個(gè)進(jìn)程內(nèi),在同一機(jī)器上的進(jìn)程之間,或者在不同主機(jī)的進(jìn)程之間進(jìn)行通信,主機(jī)可以是任何一臺(tái)有連接互聯(lián)網(wǎng)的機(jī)器。嵌套字主要包括兩部分:服務(wù)器嵌套字和客戶端嵌套字。服務(wù)器嵌套字創(chuàng)建后,就必須一直開啟,等待客戶端服務(wù)器連接,同時(shí)處理多個(gè)連接,連接完成后可以進(jìn)行通信??蛻舳饲短鬃謩?chuàng)建后只需要連接服務(wù)器,發(fā)送數(shù)據(jù),然后斷開連接。Socket模塊搭建網(wǎng)絡(luò)服務(wù)器importsocketserversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創(chuàng)建socket嵌套字host=socket.gethostname() #獲取主機(jī)名
port=9000serversocket.bind((host,port)) #將用戶名、端口綁定到嵌套字
serversocket.listen(5) #啟動(dòng)TCP偵查器
whileTrue:clientsocket,addr=serversocket.accept() #接收TCP客戶端連接,等待直到連接到達(dá)(阻塞)print("Gotaconnectionfrom%s"%str(addr))#輸出連接的客戶端地址clientsocket.send(msg.encode('ascii')) #發(fā)送TCP消息clientsocket.close() #關(guān)閉服務(wù)器
Socket模塊搭建網(wǎng)絡(luò)客戶端importsockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創(chuàng)建socket嵌套字host=socket.gethostname() #獲取主機(jī)名
port=9000s.connect((host,port)) #啟動(dòng)TCP服務(wù)器連接msg=s.recv(1024) #接收TCP消息s.close() #關(guān)閉客戶端print(msg.decode('ascii')) #打印通信消息Urllib和Urllib2模塊“urllib”模塊urllib2”模塊的功能類似,通過這兩個(gè)模塊可以實(shí)現(xiàn)在網(wǎng)絡(luò)上訪問文件,幾乎可以和“把“URL”所指向的數(shù)據(jù)信息用做程序的輸入。僅需簡(jiǎn)單下載,“urllib”模塊就可以實(shí)現(xiàn),但是實(shí)現(xiàn)較為復(fù)雜的HTTP驗(yàn)證或要為協(xié)議編寫拓展程序就需要使用功能更強(qiáng)大的“urllib2”模塊。需要注意,Python3.X以后就沒有“urllib2”模塊,使用“fromurllibimportrequest”語(yǔ)句代替“urllib2”模塊。>>>fromurllibimportrequest>>>request.urlopen(r'/')<http.client.HTTPResponseobjectat0x0000000003588A90>如果將“urllib”模塊和正則表達(dá)式結(jié)合起來就可以下載Web網(wǎng)頁(yè)信息,提取出所需數(shù)據(jù)。UDP協(xié)議編程UDP協(xié)議(用戶數(shù)據(jù)報(bào)協(xié)議)適用于對(duì)效率要求相對(duì)較高而對(duì)準(zhǔn)確性要求相對(duì)較低的場(chǎng)合。搭建UDP網(wǎng)絡(luò)服務(wù)器importsocket#使用IPV4協(xié)議,使用UDP協(xié)議傳輸數(shù)據(jù)s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#綁定端口和端口號(hào),空字符串表示本機(jī)任何可用IP地址s.bind(('',9000))whileTrue:data,addr=s.recvfrom(1024)#顯示接收到的內(nèi)容data=data.decode()print('receivedmessage:{0}fromPORT{1[1]}on{1[0]}'.format(data,addr))#當(dāng)接收到字符串“ok”時(shí),結(jié)束socket通信ifdata.lower()=='ok':breaks.close()UDP協(xié)議編程搭建UDP網(wǎng)絡(luò)客戶端importsocketimportsyss=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#假設(shè)服務(wù)器IP為:10,端口:9000s.sendto(sys.argv[1].encode(),("10",9000))s.close()TCP協(xié)議編程TCP協(xié)議(傳輸控制協(xié)議)適用于對(duì)效率要求相對(duì)較低而準(zhǔn)確性要求很高的場(chǎng)合,例如文件傳輸、電子郵件等,socket模塊的TCP協(xié)議使用主要包括:建立連接、數(shù)據(jù)傳輸、斷開連接這三個(gè)步驟。搭建TCP網(wǎng)絡(luò)服務(wù)器importsocketfromos.pathimportcommonprefixwords={'howareyou?':'I\'mFine,thankyou.','howoldareyou?':'23','whatisyourname?':'jie',"what'syourname?":'jie','wheredoyouwork?':'Engineer','bye':'Bye'}s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#綁定sockets.bind(('',9000))#開始監(jiān)聽一個(gè)客戶端連接s.listen(1)conn,addr=s.accept()print('Connectedby',addr)#開始聊天whileTrue:data=conn.recv(1024).decode()ifnotdata:breakprint('Receivedmessage:',data)#盡量猜測(cè)對(duì)方要表達(dá)的真正意思m=0key=''forkinwords.keys():#刪除多余的空白字符data=''.join(data.split())#與某個(gè)“鍵”非常接近,就直接返回iflen(commonprefix([k,data]))>len(k)*0.7:key=kbreak#使用選擇法,選擇一個(gè)重合度較高的“鍵”length=len(set(data.split())&set(k.split()))iflength>m:m=lengthkey=k#選擇合適的信息進(jìn)行回復(fù)conn.sendall(words.get(key,'Sorry.').encode())conn.close()s.close()TCP協(xié)議編程搭建TCP網(wǎng)絡(luò)客戶端importsocketimportsys#服務(wù)端主機(jī)IP地址和端口號(hào)HOST=''PORT=9000s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:#連接服務(wù)器s.connect((HOST,PORT))exceptExceptionase:print('Servernotfoundornotopen')sys.exit()whileTrue:c=input('Inputthecontent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 宜信新人培訓(xùn)
- 京津冀房地產(chǎn)市場(chǎng)區(qū)域分化影響及投資策略研究報(bào)告
- 保健課件教學(xué)課件
- 安全教育體系化建設(shè)
- 侵犯知識(shí)產(chǎn)權(quán)課件
- 二零二五年度安置房買賣與售后維修服務(wù)合同
- 2025版酒店用品采購(gòu)合同品質(zhì)標(biāo)準(zhǔn)與供應(yīng)鏈管理
- 2025版標(biāo)示牌信息管理系統(tǒng)開發(fā)與維護(hù)合同
- 二零二五年度杭州智能交通管理系統(tǒng)建設(shè)合同樣本
- 2025版特殊車輛租賃及安全使用服務(wù)協(xié)議
- OptiSystem-設(shè)計(jì)光纖放大器和光纖激光器-訊稷
- 初中心理健康教育活動(dòng)方案(7篇)
- 《中華人民共和國(guó)監(jiān)察法實(shí)施條例》測(cè)試題
- 繁峙縣茶坊礦業(yè)開發(fā)有限公司3萬(wàn)t-a金礦開采項(xiàng)目?環(huán)評(píng)報(bào)告
- 2022年汽車維修工高級(jí)工(三級(jí))理論題庫(kù)-單選題庫(kù)
- 攝像頭圖像測(cè)試(以Imatest等為主要工具)項(xiàng)目及簡(jiǎn)介課件
- 新教材北師大版高中英語(yǔ)必修第二冊(cè)全冊(cè)重點(diǎn)單詞短語(yǔ)句型歸納總結(jié)
- POCT血糖測(cè)定授權(quán)表
- 深藍(lán)科技風(fēng)智能醫(yī)療衛(wèi)生系統(tǒng)模板課件整理
- 消防設(shè)施操作員報(bào)名承諾書
- 復(fù)件1235接線員輔導(dǎo)草稿
評(píng)論
0/150
提交評(píng)論