《Python程序設(shè)計與算法基礎(chǔ)教程》課件(含思政案例) Ch17 網(wǎng)絡(luò)編程和通信_第1頁
《Python程序設(shè)計與算法基礎(chǔ)教程》課件(含思政案例) Ch17 網(wǎng)絡(luò)編程和通信_第2頁
《Python程序設(shè)計與算法基礎(chǔ)教程》課件(含思政案例) Ch17 網(wǎng)絡(luò)編程和通信_第3頁
《Python程序設(shè)計與算法基礎(chǔ)教程》課件(含思政案例) Ch17 網(wǎng)絡(luò)編程和通信_第4頁
《Python程序設(shè)計與算法基礎(chǔ)教程》課件(含思政案例) Ch17 網(wǎng)絡(luò)編程和通信_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Ch17網(wǎng)絡(luò)編程和通信本章要點:17.1網(wǎng)絡(luò)編程的基本概念17.2基于socket的網(wǎng)絡(luò)編程17.3基于urllib的網(wǎng)絡(luò)編程17.4基于http的網(wǎng)絡(luò)編程17.5基于ftplib的網(wǎng)絡(luò)編程17.6基于poplib和smtplib的網(wǎng)絡(luò)編程資源下載提示2課件等資源:掃描封底的“課件下載”二維碼,在公眾號“書圈”中下載。素材(源碼):掃描本書目錄上方的二維碼下載。講解視頻:掃描封底刮刮卡中的二維碼,再掃描書中相應(yīng)章節(jié)中(位于每章最前)的二維碼,作為開源的補充閱讀和學(xué)習(xí)資源。

案例研究:掃描封底刮刮卡中的二維碼,再掃描書中相應(yīng)章節(jié)中(位于每章最后)的二維碼,可以在線學(xué)習(xí)。每章練習(xí)題:掃描封底刮刮卡中的二維碼,再掃描每章習(xí)題部分的二維碼,下載本章練習(xí)題電子版。

題庫平臺:教師登錄網(wǎng)站(),聯(lián)系客服開通教師權(quán)限網(wǎng)絡(luò)編程的基本概念計算機網(wǎng)絡(luò)是由傳輸介質(zhì)連接在一起的一系列設(shè)備(網(wǎng)絡(luò)節(jié)點)組成在計算機網(wǎng)絡(luò)中,用于規(guī)定信息的格式以及如何發(fā)送和接收信息的一套規(guī)則、標準或約定稱為網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)編程就是通過網(wǎng)絡(luò)協(xié)議與其他計算機進行通訊TCP/IP協(xié)議模型把TCP/IP協(xié)議族分成四個層次:圖17-2IP地址和域名IPV4版本規(guī)定IP地址由32位二進制數(shù)碼組成一般采用以點分十進制表示方法,即32位二進制數(shù)碼組成的IP地址,每8位為一組,共分為4組,中間用“.”隔開域名系統(tǒng):管理計算機域名與IP地址的對應(yīng)關(guān)系統(tǒng)一資源定位器URL專為標識Internet網(wǎng)上資源位置而設(shè)的一種編址方式URL一般由以下幾個部分組成:基于socket的網(wǎng)絡(luò)編程(1)套接字:網(wǎng)絡(luò)中兩個應(yīng)用程序之間通信的端點基于套接字的TCPServer的網(wǎng)絡(luò)編程一般包括以下基本步驟(1)創(chuàng)建socket對象。(2)將socket綁定到指定地址上。(3)準備好套接字,以便接收連接請求。(4)通過socket對象方法accept,等待客戶請求連接。(5)服務(wù)器和客戶機通過send和recv方法通信(傳輸數(shù)據(jù))。(6)傳輸結(jié)束,調(diào)用socket的close方法以關(guān)閉連接?;谔捉幼值腡CPClient的網(wǎng)絡(luò)編程一般包括以下基本步驟(1)創(chuàng)建socket對象。(2)通過socket對象方法connect連接服務(wù)器。(3)客戶機和服務(wù)器通過send和recv方法通信(傳輸數(shù)據(jù))。(4)傳輸結(jié)束,調(diào)用socket的close方法以關(guān)閉連接?;趕ocket的網(wǎng)絡(luò)編程(2)基于套接字的UDPServer的網(wǎng)絡(luò)編程一般包括以下基本步驟(1)創(chuàng)建socket對象。(2)將socket綁定到指定地址上。(3)服務(wù)器和客戶機通過send和recv方法通信(傳輸數(shù)據(jù))。(4)傳輸結(jié)束,調(diào)用socket的close方法以關(guān)閉連接?;谔捉幼值腢DPClient的網(wǎng)絡(luò)編程一般包括以下基本步驟(1)創(chuàng)建socket對象。(2)客戶機和服務(wù)器通過send和recv方法通信(傳輸數(shù)據(jù))。(3)傳輸結(jié)束,調(diào)用socket的close方法以關(guān)閉連接。簡單TCP程序:EchoServer基于TCP的EchoServer包括服務(wù)器/客戶機兩個部分:服務(wù)端應(yīng)用程序和客戶機應(yīng)用程序。服務(wù)端應(yīng)用程序創(chuàng)建一個socket并綁定到某個“IP地址:端口號”上,然后偵聽listen,并使用阻塞方法accept以等待客戶機連接請求客戶機創(chuàng)建一個socket,并建立到服務(wù)器的連接;客戶機循環(huán)接收用戶數(shù)據(jù)并發(fā)送數(shù)據(jù)到服務(wù)器,服務(wù)器接收數(shù)據(jù)后回送(Echo)給客戶機??蛻魴C輸入空數(shù)據(jù)時,關(guān)閉socket并終止運行;服務(wù)器接收到空數(shù)據(jù)時,關(guān)閉socket并終止運行【例17.1】服務(wù)端應(yīng)用程序ChatServerimportsocket#導(dǎo)入socket模塊serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創(chuàng)建服務(wù)器socketserversocket.bind(('',8000))#綁定到IP地址和端口號serversocket.listen(1)#開始偵聽,隊列長度為1clientsocket,clientaddress=serversocket.accept()#使用阻塞方法accept以等待客戶機連接請求print('Connectionfrom',clientaddress)#接收客戶機請求后輸出客戶機的信息while1:#循環(huán)以接收和回送客戶機數(shù)據(jù)data=clientsocket.recv(1024)#接收數(shù)據(jù)ifnotdata:break#接收到空數(shù)據(jù)時,終止循環(huán)print('Receivedfromclient:',repr(data))#輸出接收到的數(shù)據(jù),repr函數(shù)轉(zhuǎn)換為字符串print('Echo:',repr(data))#輸出發(fā)送到客戶機數(shù)據(jù)的信息clientsocket.send(data)#回送數(shù)據(jù)到客戶機clientsocket.close()#關(guān)閉客戶機socketserversocket.close()#關(guān)閉服務(wù)器socket【例17.2】客戶機應(yīng)用程序ChatClientimportsocket#導(dǎo)入socket模塊clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創(chuàng)建客戶機socketclientsocket.connect(('',8000))#連接到服務(wù)器while1:#循環(huán)以接收用戶輸入,并發(fā)送到服務(wù)器,接收服務(wù)器的回送數(shù)據(jù)data=input('>')#接收用戶輸入數(shù)據(jù)clientsocket.send(data.encode())#把數(shù)據(jù)轉(zhuǎn)換為bytes對象,并發(fā)送到服務(wù)器ifnotdata:break#如果數(shù)據(jù)為空,終止循環(huán)newdata=clientsocket.recv(1024)#接收服務(wù)器的回送數(shù)據(jù)print('Receivedfromserver:',repr(newdata))#輸出接收到數(shù)據(jù)clientsocket.close()#關(guān)閉客戶機socket簡單UDP程序:EchoServer基于UDP的EchoServer包括服務(wù)器/客戶機兩部分:服務(wù)端應(yīng)用程序創(chuàng)建一個socket并綁定到某個“IP地址:端口號”上,然后循環(huán)使用recvfrom接收數(shù)據(jù)(返回數(shù)據(jù)和客戶機地址),并使用sendto回送數(shù)據(jù)到客戶機地址客戶機創(chuàng)建一個socket,然后循環(huán)使用sendto發(fā)送用戶輸入的數(shù)據(jù)到服務(wù)器,并接收服務(wù)器回送的數(shù)據(jù)??蛻魴C輸入空數(shù)據(jù)時,關(guān)閉socket并終止運行;服務(wù)器接收到空數(shù)據(jù)時,關(guān)閉socket并終止運行【例17.3】服務(wù)端應(yīng)用程序ChatServerUDP#ChatServerUDP.pyimportsocket#導(dǎo)入socket模塊serversocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#創(chuàng)建服務(wù)器socketserversocket.bind(('',8000))#綁定到IP地址和端口號while1:#循環(huán)以接收和回送客戶機數(shù)據(jù)data,address=serversocket.recvfrom(1024)#接收數(shù)據(jù),返回數(shù)據(jù)和客戶機地址ifnotdata:break;#接收到空數(shù)據(jù)時,終止循環(huán)print('Receivedfromclient:',address,repr(data))#輸出接收到的數(shù)據(jù),repr函數(shù)轉(zhuǎn)換為字符串print('Echo:',repr(data))#輸出發(fā)送到客戶機數(shù)據(jù)的信息serversocket.sendto(data,address)#發(fā)送數(shù)據(jù)到客戶機serversocket.close()#關(guān)閉服務(wù)器socket【例17.4】客戶機應(yīng)用程序ChatClientUDP#ChatClientUDP.pyimportsocket#導(dǎo)入socket模塊clientsocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#創(chuàng)建客戶機socketwhile1:#循環(huán)以接收用戶輸入,并發(fā)送到服務(wù)器,接收服務(wù)器的回送數(shù)據(jù)data=input('>')#接收用戶輸入數(shù)據(jù)clientsocket.sendto(data.encode(),('',8000))#把數(shù)據(jù)轉(zhuǎn)換為bytes對象,并發(fā)送到服務(wù)器ifnotdata:break#如果數(shù)據(jù)為空,終止循環(huán)newdata=clientsocket.recvfrom(1024)#接收服務(wù)器的回送數(shù)據(jù)print('Receivedfromserver:',repr(newdata))#輸出接收到數(shù)據(jù)clientsocket.close()#關(guān)閉客戶機socketUDP程序:QuoteServerQuoteServer實現(xiàn)Quoteoftheday(每日名言)功能:客戶機發(fā)送一個數(shù)據(jù)報到Quote服務(wù)器(相當(dāng)于請求)服務(wù)器使用接收來自客戶機的數(shù)據(jù)報(請求)服務(wù)器從格言列表中讀取一句名言,并作為數(shù)據(jù)報發(fā)送給客戶機客戶機接收Quote服務(wù)器的數(shù)據(jù)報(包含一句名言),并顯示該名言【例17.5】服務(wù)器應(yīng)用程序QuoteServerimportsocket,random#導(dǎo)入socket和random模塊quotes=['不妄求,則心安,不妄做,則身安','多門之室生風(fēng),多言之人生禍','人之心胸,多欲則窄,寡欲則寬',

'三人行,必有我?guī)?,'滴水穿石,磨杵成針','是非天天有,不聽自然無','積德為產(chǎn)業(yè),強勝于美宅良田']serversocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#創(chuàng)建服務(wù)器socketserversocket.bind(('',8002))#綁定到IP地址和端口號while1:#循環(huán)以接收和回送客戶機數(shù)據(jù)data,address=serversocket.recvfrom(1024)#接收數(shù)據(jù),返回數(shù)據(jù)和客戶機地址quote=random.choice(quotes)#從Quotes列表中隨機選擇一個項目serversocket.sendto(quote.encode(),address)#把數(shù)據(jù)轉(zhuǎn)換為bytes對象,并發(fā)送數(shù)據(jù)到客戶機serversocket.close()#關(guān)閉服務(wù)器socket【例17.6】客戶機應(yīng)用程序QuoteClientimportsocket#導(dǎo)入socket模塊clientsocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#創(chuàng)建客戶機socketclientsocket.sendto(b'hello',('',8002))#數(shù)據(jù)轉(zhuǎn)換為bytes對象,發(fā)送到服務(wù)器newdata,address=clientsocket.recvfrom(1024)#接收服務(wù)器的回送數(shù)據(jù)print('今日名言:',newdata.decode())#接收到數(shù)據(jù)解碼為字符串,并輸出clientsocket.close()#關(guān)閉客戶機socket基于urllib的網(wǎng)絡(luò)編程urllib.request(打開和讀取URL)urllib.parse(解析URL)urllib.error(urllib.request引發(fā)的異常)urllib.robotparser(解析robots.txt文件)【例17.7】打開和讀取URL網(wǎng)絡(luò)資源示例>>>importurllib.request>>>f=urllib.request.urlopen('')#打開URL資源>>>print(f.read(200))#讀取200個字節(jié),返回bytes對象并輸出b'<!DOCTYPEhtml>\r\n<html>\r\n\t<head>\r\n\t\t<metahttp-equiv="content-type"content="text/html;charset=utf-8">\r\n\t\t<metahttp-equiv="X-UA-Compatible"content="IE=Edge">\r\n\t\t<metacontent="never"name="referrer"'創(chuàng)建Request對象【例17.8】Request對象示例(RequestTest.py)importurllib.request#導(dǎo)入urllib.request模塊defgetURLInfo(url,data,headers):req=urllib.request.Request(url,data,headers)#創(chuàng)建Request對象print('Fullurl:',req.full_url)#URLprint('Host:',req.host)#主機和端口號print('Data:',req.data)#向服務(wù)器傳送的數(shù)據(jù)#測試代碼if__name__=='__main__':url=''values={'wd':'python'}data=urllib.parse.urlencode(values)data=data.encode(encoding='UTF8')headers={'User-Agent':'Mozilla/4.0(compatible;MSIE5.5;WindowsNT)'}getURLInfo(url,data,headers)基于http的網(wǎng)絡(luò)編程http.client(低級別的HTTP協(xié)議客戶端,高級別的URL打開則使用urllib.request)http.server(基于socketserver的HTTP服務(wù)器類)http.cookies(使用cookies實現(xiàn)狀態(tài)管理的工具)http.cookiejar(提供cookies的持久性)基于ftplib的網(wǎng)絡(luò)編程創(chuàng)建FTP對象創(chuàng)建FTP_TLS對象【例17.9】創(chuàng)建FTP對象示例>>>fromftplibimportFTP>>>ftp=FTP("")>>>ftp.login()'230Anonymousaccessgranted,restrictionsapply'>>>ftp.dir()-rw-rw-r--1ftpftp451Jul12005README.MIRRORSdrwxrwxr-x3ftpftp4096Jul12005develdrwxrwxr-x3ftpftp4096Dec22010distribdrwxrwxr-x4ftpftp4096Jul12005historic>>>ftp.cwd('devel')'250CWDcommandsuccessful'>>>ftp.dir()drwxrwxr-x2ftpftp4096Jul1000:07source基于poplib和smtplib的網(wǎng)絡(luò)編程poplib模塊提供了對POP3協(xié)議的支持smtplib模塊提供了對SMTP協(xié)議的支持使用poplib和smtplib,可以實現(xiàn)接收和發(fā)送郵件的功能【例17.10】pop3示例importgetpass,poplibhost='YourPop3Host'#POP3服務(wù)器的主機名或IP地址,運行時需修改為對應(yīng)的值port=110#POP3服務(wù)器的端口號,默認為110,運行時需修改為對應(yīng)的值pop3=poplib.POP3(host,port=port)#創(chuàng)建POP3對象pop3.user(getpass.getuser())#用戶名pop3.pass_(getpass.getpass())#密碼numMessages=len(pop3.list()[1])#郵件數(shù)foriinrange(numMessages):#接收郵件forjinpop3.retr(i+1)[1]:print(j)【例17.11】smtp示例importsmtplibdefprompt(prompt):returninput(prompt).strip()fromaddr=prompt("From:")toaddrs=prompt("To:").split()print("輸入信息,^D(Unix)or^Z(Windows)結(jié)束輸入:")#添加From:和To:頭信息msg=("From:%s\r\nTo:%s\r\n\r\n"%(fromaddr,",".join(toaddrs)))whileTrue:try:line=input()exceptEOFError:breakifnotline:breakmsg=msg+lineprint("信息長度為:",len(msg))server=smtplib.SMTP('localhost')server.set_debuglevel(1)server.sendmail(fromaddr,toaddrs,msg)server.quit()本章小結(jié)實驗和習(xí)題課本實例17.1~實例17.11復(fù)習(xí)題填空題思考題案例研究:網(wǎng)絡(luò)爬蟲案例(1)網(wǎng)絡(luò)爬蟲是通過跟蹤超鏈接系統(tǒng)訪問Web頁面的程序。每次訪問一個網(wǎng)頁時,會分析網(wǎng)頁內(nèi)容,提取結(jié)構(gòu)化數(shù)據(jù)信息最簡單最直接的方法是使用urllib(或requests)庫請求網(wǎng)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論