當前位置:首頁 » 編程語言 » python3的網路編程

python3的網路編程

發布時間: 2023-08-08 05:05:37

1. python網路編程可以用來做什麼

下面是Python的應用及崗位。

第一部分:各個領域應用的語言。

四個重要的定位:驗證演算法、快速開發、測試運維、數據分析。

1、驗證演算法:就是對我們公司一些常見設計演算法或者公式的驗證,公式代碼化。

2、快速開發:這個大家應該都比較熟悉,快速開發,就是用成熟框架,更少的代碼來開發網站,Python在網站前後台有大量的成熟的框架,如django,flask,bottle,tornado,flask和django的使用較多,國內用Python開發的網站有:知乎、豆瓣、扇貝、騰訊、阿里巴巴;

3、測試運維:用python實現的測試工具及過程,包含伺服器端、客戶端、web、andriod、client端的自動化測試,自動化性能測試的執行、監控和分析,常用selenium appium等
框架。做運維同學應該清楚,在linux運維工作中日常操作涵蓋了監控,部署,網路配置,日誌分析,安全檢測 等等許許多多的方面,無所不包。python可以寫很多的腳本,把「操作」這個行為做到極致。與此同時,python在伺服器管理工具上非常豐富,配置管理(saltstack) 批量執行( fabric, saltstack) 監控(Zenoss, nagios 插件) 虛擬化管理( python-libvirt) 進程管理 (supervisor) 雲計算(openstack) ...... 還有大部分系統C庫都有python綁定。

4、數據分析:Python有三大神器:numpy,scipy,matplotlib,其中numpy很多底層使用C語言實現的,所以速度很快,用它參加各種數學建模大賽,完全可以替代r語言和MATLAB。spark,Hadoop都開了Python的介面,所以使用Python做大數據的maprece也非常簡單,加上py對資料庫支持都很好,或者類似sqlalchemy的orm也非常強大好用。

在結束這個部分之前,大家有沒有一個疑問:為什麼爬蟲沒有中重點講?

其實這里給大家重點說一下,如果你要學好Python,僅僅停留在爬蟲上,這個是很不靠譜的。Python 寫爬蟲的教程網上一抓一大把,據大家所知很多初學 Python 的人都是使用它編寫爬蟲程序。小到抓取一個小黃圖網站,大到一個互聯網公司的商業應用。通過 Python 入門爬蟲比較簡單易學,不需要在一開始掌握太多太基礎太底層的知識就可以很快上手,而且很快可以做出成果,非常適合小白一開始想做出點看得見的東西的成就感。

除了入門,爬蟲也被廣泛應用到一些需要數據的公司、平台和組織,通過抓取互聯網上的公開數據,來實現一些商業價值是非常常見的做法。

當然這些選手的爬蟲就要厲害的多了,需要處理包括路由、存儲、分布式計算等很多問題,與小白的抓黃圖小程序,復雜度差了很多倍。

2. 想要學習python網路編程,該怎樣入手

網路是說 networking 還是 web?
Networking:
Unix Network Programming,TCP/IP Illustrated
至少看完第一本 80%+ 第二部卷 1 50% ,看的時候把所有代碼用 Python 寫過來,否則就不用想別的事情。

Web:
基本看過 RFC2616,然後挑一個框架(例如:Flask 或 Django),直接看 Tutorial。當然做 web 還要學大量的其它東西,如 HTML / CSS / JavaScript / Database 等。

問題補充的部分,簡單說說:

用賬號密碼自動登陸網站、自動填表什麼的,需要的是 HTTP(RFC 2616)和 web (如表單處理等)相關知識,可能需要或不需要
socket 知識,但是了解更好。製作曲線圖之類需要的是 matplotlib 等數據制圖工具的知識,Email 有 smtplib
之類的庫可以解決,」每天定時「依靠 cron 或系統計劃任務。做這種事情所需的知識面基本是很廣的,但深度要求不高。

3. Python網路編程 -- TCP/IP

首先放出一個 TCP/IP 的程序,這里是單線程伺服器與客戶端,在多線程一節會放上多線程的TCP/IP服務程序沖戚拍。

這里將服務端和客戶端放到同一個程序當中,方便對比服務端與客戶端的不同。

TCP/IP是網際網路的通信協議,其參考OSI模型,也採用了分層的方式,對每一層制定了相應的標准。

網際協議(IP)是為全世界通過互聯網連接的計算機賦予統一地址系統的機制,它使得數據包能夠從互聯網的一端發送至另一端,如 130.207.244.244,為了便於記憶,常用主機名代替IP地址,例如 .com。

UDP (User Datagram Protocol,用戶數據報協議) 解決了上述第一個問題,通過埠號來實現了多路復用(用不同的埠區分不同的應用程序)但是使用UDP協議的網路程序需要自己處理丟包、重包和包的亂序問題。

TCP (Transmission Control Protocol,傳輸控制協議) 解決了上述兩個問題,同樣使用埠號實現了復用。

TCP 實現可靠連接的方法:

socket通信模型及 TCP 通信過程如下兩張圖。

[圖片上傳失敗...(image-6d947d-1610703914730)]

[圖片上傳失敗...(image-30b472-1610703914730)]

socket.getaddrinfo(host, port, family, socktype, proto, flags)
返回: [(family, socktype, proto, cannonname, sockaddr), ] 由元組組成的列表散羨。
family:表示socket使用的協議簇, AF_UNIX : 1, AF_INET: 2, AF_INET6 : 10。 0 表示不指定。
socktype: socket 的類型, SOCK_STREAM : 1, SOCK_DGRAM : 2, SOCK_RAW : 3
proto: 協議, 套接字所用的協議,如果不指定, 則為 0。 IPPROTO_TCP : 6, IPPRTOTO_UDP : 17
flags:標記,限制返回內容。 AI_ADDRCONFIG 把計算機無法連接的所有地址都過濾掉(如果一個機構既有IPv4,又有IPv6,而主機只有IPv4,則會把 IPv6過濾掉)
AI _V4MAPPED, 如果本機只有IPv6,服務卻只有IPv4,這個標記會將 IPv4地址重新編碼為可實際使用的IPv6地址。
AI_CANONNAME,返回規范主機名:cannonname。
getaddrinfo(None, 'smtp', 0, socket.SOCK_STREAM, 0, socket.AP_PASSIVE)
getaddrinfo('ftp.kernel.org', 'ftp', 0, 'socket.SOCK_STREAM, 0, socket.AI_ADDRCONFIG | socket.AI_V4MAPPED)
利用已經通信的套接字名提供給getaddrinfo
mysock = server_sock.accept()
addr, port = mysock.getpeername()
getaddrinfo(addr, port, mysock.family, mysock.type, mysock.proto, socket.AI_CANONNAME)

TCP 數據發送模式:

由於 TCP 是發送流式數據,並且會自動分割發送的數據包,而仔槐且在 recv 的時候會阻塞進程,直到接收到數據為止,因此會出現死鎖現象,及通信雙方都在等待接收數據導致無法響應,或者都在發送數據導致緩存區溢出。所以就有了封幀(framing)的問題,即如何分割消息,使得接收方能夠識別消息的開始與結束。

關於封幀,需要考慮的問題是, 接收方何時最終停止調用recv才是安全的?整個消息或數據何時才能完整無缺的傳達?何時才能將接收到的消息作為一個整體來解析或處理。

適用UDP的場景:

由於TCP每次連接與斷開都需要有三次握手,若有大量連接,則會產生大量的開銷,在客戶端與伺服器之間不存在長時間連接的情況下,適用UDP更為合適,尤其是客戶端太多的時候。

第二種情況: 當丟包現象發生時,如果應用程序有比簡單地重傳數據聰明得多的方法的話,那麼就不適用TCP了。例如,如果正在進行音頻通話,如果有1s的數據由於丟包而丟失了,那麼只是簡單地不斷重新發送這1s的數據直至其成功傳達是無濟於事的。反之,客戶端應該從傳達的數據包中任意選擇一些組合成一段音頻(為了解決這一問題,一個智能的音頻協議會用前一段音頻的高度壓縮版本作為數據包的開始部分,同樣將其後繼音頻壓縮,作為數據包的結束部分),然後繼續進行後續操作,就好像沒有發生丟包一樣。如果使用TCP,那麼這是不可能的,因為TCP會固執地重傳丟失的信息,即使這些信息早已過時無用也不例外。UDP數據報通常是互聯網實時多媒體流的基礎。

參考資料:

4. Python 網路編程需要學習哪些網路相關的知識

我和你一樣,也是正在學Python編程的,首先得先把C基礎學會,我現在也正在學C,看視頻學的,我現在看的是夏老師的,感覺還行,最吸引我的的地方就是講的一聽就能聽懂,而且不繁瑣啰嗦,簡明清晰,都是重點。之前看過郝斌金文什麼的,康輝的也看了一點,感覺都講的太高深了,而且聽不出哪些是重點,有用沒用的都講,像我這樣初學者都看的失去學的信心了。

5. python中 r'', b'', u'', f'' 的含義

1、字元串前+u,如u"我是張三":

前綴u表示該字元串是unicode編碼,在Python2中常被用在中文字元的字元串前,防止因為編碼問題所導致的亂碼,一般在文件開頭標明編碼方式採用utf8。在Python3中,所有的字元串默認都是unicode字元串。

2、旦者字元串前+r,如r" ":

表示一個正常的字元串,通常 被用作換行,而+r後,即表示 ,說白了就是去掉反斜杠的轉義機制,在普通字元串中,反斜線是轉義符,褲者代表一些特殊的內容,常用胡遲薯於特殊的字元,如換行符、正則表達式、文件路徑。注意不能在原始字元串結尾輸入反斜線,否則Python不知道這是一個字元還是換行符(字元串最後用表示換行),會報錯。

3、字元串前+b,如abc=b'Zhangsan':

b' ':表示這是一個bytes對象,用在Python3中,它默認的str是unicode類,Python2的str本身就是bytes類。

b" ":表示後面字元串是bytes類型。

前綴b表示該字元串是bytes類型,常用在網路編程,伺服器和瀏覽器只認bytes類型的數據,如send函數的參數和recv的函數的返回值都是bytes類型。

4、字元串前+f:

Python3.6的新加特性,前綴f用來格式化字元串,可以看出f前綴可以更方便地格式化字元串,比format()方法的可讀性更高,且使用較方便,在加上f前綴後,支持在大括弧內,運行Python表達式,也可以用fr前綴用來表示原生字元串。

6. Python網路編程9-實現TCP三次握手與四次揮手

   見TCP流量分析祥爛塌篇
   TCP 流量分析 - (jianshu.com)

  使用一台windows主機作為TCP Server,使用一台Linux作為TCP Client,發起TCP連接,發送數據,結束連接。

  以下Python腳本通過Socket實現TCP Server端,謹圓接收TCP連接。

  以下Python腳本通過歷亂Scapy實現TCP Client端,向Server端發起TCP連接。

  首先在Windows主機上運行TCP Server腳本。

  在linux主機上運行TCP Client腳本後,會將TCP交互過程列印出來。

  通過科來的csna抓包,並追蹤TCP流,如下為交互的數據包

熱點內容
項目編譯慢 發布:2025-02-06 16:53:48 瀏覽:379
python處理excel文件 發布:2025-02-06 16:36:09 瀏覽:439
演算法相對定位 發布:2025-02-06 16:32:42 瀏覽:725
java程序的編譯和執行 發布:2025-02-06 16:21:45 瀏覽:416
什麼是淘寶帳號和密碼 發布:2025-02-06 16:21:36 瀏覽:495
解壓前面簽 發布:2025-02-06 16:02:00 瀏覽:324
華碩訪問點 發布:2025-02-06 15:56:57 瀏覽:331
excel拼接sql 發布:2025-02-06 15:50:10 瀏覽:501
加密手機直播 發布:2025-02-06 15:49:31 瀏覽:535
自帶ftp伺服器好用嗎 發布:2025-02-06 15:26:11 瀏覽:110