《Python程序設(shè)計(jì)》第10章 網(wǎng)絡(luò)編程_第1頁
《Python程序設(shè)計(jì)》第10章 網(wǎng)絡(luò)編程_第2頁
《Python程序設(shè)計(jì)》第10章 網(wǎng)絡(luò)編程_第3頁
《Python程序設(shè)計(jì)》第10章 網(wǎng)絡(luò)編程_第4頁
《Python程序設(shè)計(jì)》第10章 網(wǎng)絡(luò)編程_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

口令: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àn)樗鼘Ω鲗泳W(wǎng)絡(luò)協(xié)議進(jìn)行封裝,所以只需要處理好程序上的設(shè)計(jì),不需要關(guān)心網(wǎng)絡(luò)通信的具體細(xì)節(jié),使用時直接調(diào)用相對應(yīng)的類即可。Python語言非常擅長字節(jié)流和各種模式的處理,使用Python語言方便程序設(shè)計(jì)時各種網(wǎng)絡(luò)協(xié)議格式的處理。由于Python語言的網(wǎng)絡(luò)處理工具太過豐富,所以本章節(jié)主要講解當(dāng)前今常用的“socket模塊”、“urllib模塊”和“urllib2模塊”網(wǎng)絡(luò)設(shè)計(jì)模塊。Socket模塊“socket”模塊也叫做嵌套字模塊,嵌套字是雙向通信信道的端點(diǎn),套接字可以在一個進(jìn)程內(nèi),在同一機(jī)器上的進(jìn)程之間,或者在不同主機(jī)的進(jìn)程之間進(jìn)行通信,主機(jī)可以是任何一臺有連接互聯(lián)網(wǎng)的機(jī)器。嵌套字主要包括兩部分:服務(wù)器嵌套字和客戶端嵌套字。服務(wù)器嵌套字創(chuàng)建后,就必須一直開啟,等待客戶端服務(wù)器連接,同時處理多個連接,連接完成后可以進(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) #啟動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)) #啟動TCP服務(wù)器連接msg=s.recv(1024) #接收TCP消息s.close() #關(guān)閉客戶端print(msg.decode('ascii')) #打印通信消息Urllib和Urllib2模塊“urllib”模塊urllib2”模塊的功能類似,通過這兩個模塊可以實(shí)現(xiàn)在網(wǎng)絡(luò)上訪問文件,幾乎可以和“把“URL”所指向的數(shù)據(jù)信息用做程序的輸入。僅需簡單下載,“urllib”模塊就可以實(shí)現(xiàn),但是實(shí)現(xiàn)較為復(fù)雜的HTTP驗(yàn)證或要為協(xié)議編寫拓展程序就需要使用功能更強(qiáng)大的“urllib2”模塊。需要注意,Python3.X以后就沒有“urllib2”模塊,使用“fromurllibimportrequest”語句代替“urllib2”模塊。>>>fromurllibimportrequest>>>request.urlopen(r'/')<http.client.HTTPResponseobjectat0x0000000003588A90>如果將“urllib”模塊和正則表達(dá)式結(jié)合起來就可以下載Web網(wǎng)頁信息,提取出所需數(shù)據(jù)。UDP協(xié)議編程UDP協(xié)議(用戶數(shù)據(jù)報協(xié)議)適用于對效率要求相對較高而對準(zhǔn)確性要求相對較低的場合。搭建UDP網(wǎng)絡(luò)服務(wù)器importsocket#使用IPV4協(xié)議,使用UDP協(xié)議傳輸數(shù)據(jù)s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#綁定端口和端口號,空字符串表示本機(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”時,結(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é)議)適用于對效率要求相對較低而準(zhǔn)確性要求很高的場合,例如文件傳輸、電子郵件等,socket模塊的TCP協(xié)議使用主要包括:建立連接、數(shù)據(jù)傳輸、斷開連接這三個步驟。搭建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)聽一個客戶端連接s.listen(1)conn,addr=s.accept()print('Connectedby',addr)#開始聊天whileTrue:data=conn.recv(1024).decode()ifnotdata:breakprint('Receivedmessage:',data)#盡量猜測對方要表達(dá)的真正意思m=0key=''forkinwords.keys():#刪除多余的空白字符data=''.join(data.split())#與某個“鍵”非常接近,就直接返回iflen(commonprefix([k,data]))>len(k)*0.7:key=kbreak#使用選擇法,選擇一個重合度較高的“鍵”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地址和端口號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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論