pythonnet-網路編程(1)

來源:互聯網
上載者:User

標籤:之間   進入   pycharm   cal   流式   參數   接收   返回   壓縮最佳化   

python的網路編程有不少痛點,也容易忘記,最近我會陸續發出系統、完整pythonnet知識的部落格,一邊複習一邊分享,感興趣的可以關注我。

話不多說,開始吧。

 

網路編程

目的:資料的傳輸

ISO(國際標準組織)

OSI七層模型----->網路通訊的標準化流程

應用程式層:提供使用者服務,具體的內容由特定的程式規定

展示層:提供資料的加密和壓縮最佳化

會話層:確定建立應用連結,選擇傳輸服務

傳輸層:提供Data Transmission Service,進行流量控制

網路層:路由選擇,網路互聯

鏈路層:提供鏈路交換,具體訊息的發送

物理層:物理硬體,介面,網卡的規定

 

可劃分為四層模型

四層模型

應用程式層

傳輸層

網路層

物理鏈路層

 

劃分為五層模型(TCP/IP模型)

應用程式層(應用程式層 展示層 會話層)

傳輸層

網路層

鏈路層

物理層

OSI模型的優點:將功能分開,降低網路傳輸中的耦合度,使開發流程更加清晰,

每部分各司其職。

高彙總:每個模組功能盡量單一,不會多個功能摻雜

低耦合:盡量降低每個模組之間的關聯性

 

網路通訊協定:在網路通訊中協議各方必需遵守的規定。如建立什麼串連,訊息結構如何解析等。

應用程式層:TFTP HTTP DNS SMTP

傳輸層:TCP  UDP

網路層:IP

物理層:IEEE

網路相關概念

網路主機:在網路上確定一台主機

本地使用:“localhost”  127.0.0.1

網路地址:"0.0.0.0"   "172.60.50.54"(本機網路IP)

查看本機IP地址:ifconfig  (linux) 

        ipconfig  (windows)

ipython3  進入互動模式

通過電腦名稱擷取匹配的IP

socket.gethostbyname("localhost")

"127.0.0.1"

擷取原生電腦名稱

socket.gethostname()

"xxxx"

IP地址

網路上確定一台主機的地址

IPv4:點分十進位

IPv6:128位

網路連接測試

ping 172.60.50.182

特殊IP

127.0.0.1  本地測試IP

0.0.0.0  自動使用本地可用網卡IP

192.168.1.0  代表當前網段

192.168.1.1  通常為網關地址

192.168.1.255  廣播位址

IP地址轉換為十六進位表達

socket.inet_aton(‘192.168.1.2‘)

b‘\xc0\xa8\x01\x02‘

網域名稱:網路伺服器地址在網路上的名稱

連接埠號碼: 連接埠號碼是地址的一部分,在一個系統中每個網路應用監聽不同的連接埠,以擷取對應連接埠傳遞的資訊

取值範圍 : 1----65535
1-255 一些通用連接埠 (眾所周知的程式佔用)
256 --1023 系統連接埠
1024 -- 65535 自用連接埠 >10000

 

傳輸層服務

連線導向的傳輸服務 ---》 tcp協議

傳輸特徵:

可靠的資料轉送
可靠性 : 資料在傳輸中,無失序 無差錯 無丟失 無重複

在資料轉送前和傳輸結束後需要建立串連和中斷連線

三向交握 : 在連線導向的傳輸服務中建立串連的過程

1. 用戶端向伺服器發送串連請求
2. 伺服器接受到請求進行確認,返回確認報文
3. 用戶端收到伺服器回複最終確認串連

四次揮手 : 在連線導向的傳輸服務站中斷連線的過程

1. 主動方發送報文,告知被動方要中斷連線
2. 被動方回複報文,表示已經接收到請求,準備斷開
3. 被動方再次發送報文,表示準備處理就緒,可以斷開
4. 主動發發送確認報文,中斷連線

應用情況 : 適用於傳輸較大的內容或檔案,網路良好,需 要保證傳輸可靠性的情況
e.g. 聊天資訊 檔案的上傳下載, 郵件處理
網頁擷取

面向不需連線的傳輸服務 ---》 udp協議

傳輸特點:
不保證傳輸的可靠性
沒有串連和斷開的過程
資料的首發比較自由

適用情況 : 網路情況可能產生丟包,對傳輸可靠性要求低

e.g. : 網路視頻, 群聊,廣播等

 

socket 通訊端編程

目的 : 通過程式設計語言提供的通訊端編程介面,可以更簡單的完成基於tcp和udp的編程

通訊端 : 完成上述目標的一種編程手段

通訊端類別

流式通訊端(SOCK_STREAM):傳輸層基於tcp的協議通訊
連線導向可靠的傳輸 tcp的傳輸 流式通訊端

資料通訊端(SOCK_DGRAM): 傳輸層基於udp協議傳輸
面向無串連不可靠的傳輸 udp的傳輸 資料通訊端

底層通訊端 (SOCK_RAM): 訪問底層協議通訊端


TCP的服務端

import socket

1. 建立通訊端

socket.socket(sock_family = AF_INET,
sock_type = SOCK_STREAM,
proto = 0)
功能 : 建立通訊端
參數 : sock_family 地址族類型 AF_INET ipv4網路通訊
sock_type 通訊端類型 SOCK_STREAM 流式
SOCK_DGRAM 資料報
proto 通常為0 選定子協議類型
傳回值 : 返回通訊端對象

2. 綁定地址

sockfd.bind(addr)
功能 : 綁定地址
參數 : addr ---》 元組 (ip,port) (‘0.0.0.0‘,1234)

3. 設定監聽通訊端

sockfd.listen(n)
功能: 將通訊端設定為監聽通訊端,建立監聽隊列
參數: 監聽隊列大小

* 一個監聽通訊端可以串連多個用戶端

4. 等待接受用戶端串連

connfd,addr = sockfd.accept()
功能 : 阻塞等待處理用戶端串連
傳回值 : connfd 新的通訊端,用於和用戶端通訊
addr 串連的用戶端的地址 (ip,port)


* 阻塞函數 : 當程式運行到阻塞函數位置,如果某種條件沒有達成則暫停程式運行,知道條件達成結束阻塞

5. 訊息的收發

data = connfd.recv(buffersize)
功能 : 接受訊息
參數 : 一次接受訊息的大小 位元組
傳回值 : 返回接受到的內容

n = connfd.send(data)
功能 : 發送訊息
參數 : 要發送的內容 (bytes格式)
傳回值 : 返回實際發送的位元組數

6. 關閉通訊端

sockfd.close()

* telnet ip port

用戶端

1. 建立通訊端 (和服務端通訊端類型相同)
2. 發起串連

connect(addr)
功能 : 向服務端發起串連
參數 : 服務端地址 元組

3. 訊息收發
4. 關閉通訊端

 

下面看代碼,此為用戶端代碼

 

 此為服務端代碼:

 

 好了,本小節完,小夥伴們可以使用pycharm(社區版免費)運行試試看,我們下次見!

 

pythonnet-網路編程(1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.