114培訓網(wǎng)歡迎您來到全國python學習中心!

13289378727

全國統(tǒng)一學習專線 9:00-21:00

不管你是待業(yè)還是失業(yè),在這個被互聯(lián)網(wǎng)圍繞的時代里,選擇python網(wǎng)路編程,就多了一項技能,還怕找不到工作?,還怕不好找工作?小編就來告訴你這個專業(yè)的優(yōu)勢到底體現(xiàn)在哪里:Python 中的網(wǎng)絡編程??。

1.Python 中的網(wǎng)絡編程

你怎么還在用Python寫的單機版程序?因為我現(xiàn)在才剛學不久 現(xiàn)在開發(fā)的基本上都是互聯(lián)網(wǎng)程序了,你要不要跟我一起學一下用Python網(wǎng)絡編程?哇!真的嗎?大佬求帶! 低調(diào)低調(diào),說到網(wǎng)絡編程,那么我們先要了解互聯(lián)網(wǎng)。我了解,互聯(lián)網(wǎng)就是把許多網(wǎng)絡連接起來。 恩,不錯,那你知道什么是TCP,UDP嗎?em,以前聽過,現(xiàn)在有點忘了,你可以給我說道說道嗎? 可以,我們以前的計算機網(wǎng)絡,為了能夠互相通信,很多廠商都有自己的一套協(xié)議,這就弄得很亂,因為互不兼容,所以通信起來很費勁。后來呢,為了讓成千上萬的計算機連接起來,定義了兩個標準的協(xié)議,一個是TCP,一個是 IP,也就是我們現(xiàn)在簡稱的 TCP/IP 協(xié)議。也就是說我們遵循 TCP/IP 協(xié)議就可以互聯(lián)了是吧! 恩,通信的時候,雙方要知道對方的標識,才能通信。那。。大佬能告訴我下 TCP 和 IP 的區(qū)別嗎? 當然可以,那我先告訴你 IP 協(xié)議吧,假如我要發(fā)信息給你,我們都在互聯(lián)網(wǎng)上,都有自己的 IP 地址和路由,那么當我發(fā)信息給你的時候呢,IP 協(xié)議就負責將數(shù)據(jù)進行傳輸,這些數(shù)據(jù)被分割成一小塊一小塊的,通過 IP 包給發(fā)送過去。因為們之間在互聯(lián)網(wǎng)上是有很多鏈路的,所以路由就會將一小塊一小塊的數(shù)據(jù)包逐個進行轉(zhuǎn)發(fā),直到發(fā)送到你的IP地址。但是它不能夠保證數(shù)據(jù)都能到達,也保證不了能夠按順序的到達。啊~那如果丟失怎么辦?有什么辦法嗎? 有!那就是 TCP 協(xié)議,TCP協(xié)議建立在IP協(xié)議之上的。TCP協(xié)議會建立可靠連接,保證數(shù)據(jù)包按順序到達。TCP協(xié)議會通過握手建立連接,確保對方按順序收到,如果包丟掉了,就自動的重新再發(fā)。哦,明白了,那剛剛你說的 UDP 又是? 我們已經(jīng)知道了 TCP 是面向連接的,比較可靠,而UDP協(xié)議呢,它是面向無連接的,也就是我只要知道你的IP地址和端口就可以直接給你發(fā)送數(shù)據(jù)了,不需要先跟你握手,不過數(shù)據(jù)能不能到達就不知道了。哦,明白,就是TCP可靠,UDP傳輸效率高。 對頭,所以呢,如果不要求數(shù)據(jù)可靠到達的話就可以用UDP。那么接下來我們就用 Python 來進行 TCP 和 UDP 的編程吧。太好了??! 不過在此之前跟你講一下 Socket 的東西,因為等下我們要用到,Socket 在互聯(lián)網(wǎng)編程中表示建立了一個互聯(lián)網(wǎng)連接,Socket知道了對方的IP地址、端口號、協(xié)議,就可以建立連接了。恩,感謝大佬,明白了。 ok,那我們開始吧!1 Python 中的 TCP 編程1.1 TCP客戶端的編寫我們現(xiàn)在訪問一些網(wǎng)頁什么的,這些網(wǎng)頁是在服務器端的,而我們訪問的設備屬于客戶端。比如我們現(xiàn)在通過瀏覽器訪問這個地址: Python 來建立可靠的 TCP 連接,獲取到這些圖片呢?# 導入socket這個庫 import socket # 創(chuàng)建一個socket對象 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 開始建立TCP連接 s.connect(("www.meizitu.com",80)) # 連接后,發(fā)送請求 s.send(b'GET / HTTP/1.1rnHost: www.meizitu.comr: closernrn') # 接收數(shù)據(jù) buffer = [] while True: d = s.recv(1024) if d: buffer.append(d) else: break # 把字節(jié)連接起來 data = b''.join(buffer) # 關閉連接 s.close() # 把數(shù)據(jù)讀取出來 with open('meizi.html','wb') as f: f.write(data) 運行之后,我么就有了咱們的妹紙文件:打開有驚喜。 這就是建立TCP連接,然后客戶端向服務端發(fā)送請求的過程了。嗯嗯嗯,我懂了,我這就去試試,小姐姐等我。 瞧把你急的,服務端怎么寫不了解一下?要啊,見笑見笑,我把紙巾收回去先。1.2 TCP 服務端的編寫服務端一般都是一直在運行著的,等待著客戶端來連接,然后給出請求響應,服務端需要提供 ip 地址和端口給客戶端去連接。首先我們來寫一個簡單服務端的:import socket # 創(chuàng)建socket對象 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 綁定監(jiān)聽端口 s.bind(('127.0.0.1',8888)) # 監(jiān)聽 s.listen(1) while True: # 接收連接 sock,addr = s.accept() print("有人連進來了") sock.send(b'hei man, are you ok?') sock.close當有人連接進來我們就給他發(fā)一句:hei man,are you ok ?接著我們再來寫個客戶端的連接過去:# 導入socket這個庫 import socket # 創(chuàng)建一個socket對象 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 開始建立TCP連接 s.connect(("127.0.0.1",8888)) # 接收數(shù)據(jù) buffer = [] d = s.recv(1024) buffer.append(d) # 把字節(jié)連接起來 data = b''.join(buffer) print(data) # 關閉連接 s.close()然后先運行我們的服務端,再運行客戶端: 這就是TCP了,這里我就模擬自己一個人來連接,如果多個連接就要開啟多個線程,懂了么?懂了懂了,謝謝大佬,給~ 肥皂就不必了,我是直男。不好意思,我剛剛拿錯了,對了,大佬,那我怎么使用Python來編寫UDP協(xié)議的呢? 你已經(jīng)知道了 TCP ,那么 UDP 也差不多的,不過UDP更簡單一些,它不需要建立可靠的連接,直接請求就可以了,我寫個代碼給你看看吧。2 Python中的 UDP 編程我們來先寫服務端:import socket # 創(chuàng)建socket對象,這里傳入的是SOCK_DGRAM,代表UDP s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 綁定監(jiān)聽端口 s.bind(('127.0.0.1',8090)) while True: # 接收連接 data,addr = s.recvfrom(1024) print(addr) s.sendto(b'hei man, are you ok?',addr)可以看到,在這里我們不需要跟對方連接,只要知道地址就直接發(fā)送過去就可以了??蛻舳耍篿mport socket # 創(chuàng)建一個socket對象 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.sendto(b'ha',("127.0.0.1",8090)) # 接收數(shù)據(jù) print(s.recv(1024).decode('utf-8')) # 關閉連接 s.close()運行如下: 這就是UDP。感謝大佬,我去試一下 恩,去吧,少看點妹紙圖。關注我,讓你像看小黃文一樣輕松學到 Python 的所有!ps:還沒獲取我精心準備的 Python 電子書和思維導圖等干貨的可以在我的公眾號「學習Python的正確姿勢」中發(fā)送 python 免費獲取哦! 點贊,轉(zhuǎn)發(fā)到朋友圈是一種支持

就拿大數(shù)據(jù)說話,優(yōu)勢一目了然,從事IT行業(yè),打開IT行業(yè)的新大門,找到適合自己的培訓機構,進行專業(yè)和系統(tǒng)的學習。

溫馨提示:為不影響您的學業(yè),來校區(qū)前請先電話咨詢,方便我校安排相關的專業(yè)老師為您解答
相關資料
  • 作者最新文章
  • 在線報名
申請試聽課程

只要一個電話
我們免費為您回電

姓名不能為空
手機號格式錯誤