網路編程
來自專欄 python學習之路
應用
c/s架構
server服務端 是要一直運行的
client客戶端
b/s架構只需要有瀏覽器就可以看到想看到的東西
client服務端
Broser瀏覽器
b/s架構火了--統一入口
手機端b/s統一入口-----各種小程序和公眾號
解耦分治的思想-----統一入口
請假系統
b/s是c/s架構的一種
網路編程 c/s b/s(學完前端)
計算機網路 網卡提供硬體上的網口,,網卡會有一個全球唯一的一個mac地址
mac地址
編碼 位元組 8位一斷句 256
四個點分十進位 4個8位二進位00000000.00000000.00000000.00000000
IPv4地址 0.0.0.0.0-255.255.255.255
ipv6 0.0.0.0.0.0.0.0-255.255.255.255.255.255
通過IP地址就能找到mac地址 ----> 使用arp協議
保留欄位 127.0.0.1本地迴環地址
交換機---解決多台機器通信的問題 廣播形式(交換機告訴所有的機器但只有一個回應)回應的方式是單播
數量較多時會出現廣播風暴 廣域網與路由器
默認網關---區域網中的機器想要訪問區域網外的機器需要通過網關
IP地址和子網掩碼 按位與
255.255.255.0(子網掩碼)
192.168.13.253 (IP地址) 按位與會得出區域網的網段 前三位相同則在同一個區域網內
IP協議的作用主要有連個 為每一台計算機分配IP 確定哪一些地址是在同一個子網路
埠:找到程序
在計算機上每一個需要通信的程序都會開一個埠
在同一時間只會有一個程序佔用一個埠
埠的範圍是0--65535 一般用8000之後的埠
ip 在一個區域網內確定一個機器
埠 確定唯一的一個程序 ip+埠找到唯一的一個程序
計算機之前的通信
TCP協議和UDP協議
全雙工 client 和server 雙方都可以收發消息 佔用計算機之間的通信線路 直到它被一方或者雙方關閉為止
TCP三次握手 數據傳輸 斷鏈接四次揮手 (長連接可靠)
UDP協議 傳輸數據之前源端和終端不建立連接,只是抓取數據丟到終端(是不可靠的但很快不佔連接)QQ在UDP的基礎上實現tcp(通過程序實現)
互聯網協議與osi協議
應用層
傳輸層 (選擇通信協議TCP UDP)設備:四層路由器、四層交換機
網路層 (ip協議) 設備:路由器 三層交換機(具有路由器和交換機功能)
數據鏈路層 (mac地址arp協議通過ip找到mac地址)設備:網橋、乙太網交換機、網卡
物理層(網線、網卡 通電01) 物理設備:中繼器、集線器、雙絞線
IP地址 埠 TCP/UDP協議 TCP應用:web瀏覽器、電子郵件、文件傳輸程序
套接字socket(圖1.2)是應用層與tcp/ip協議通信的中間軟體抽象層,它是一組介面。
基於文件類型的套接字
基於網路的套接字AF_INET(IPv4)
server.py
import socket
sk = socket.socket() #買手機#sk.setsockopt(socket.SQL_SOCKET,socket.SO_REUSEADDR,1)#避免服務重啟是報address already in usesk.bind((127.0.0.1,8080))#綁定手機卡 ip portsk.listen() #監聽 等著有人打電話coon,addr = sk.accept()#接到別人的電話cnnnection連接 address 地址(別人的地址)
print(addr)while True: ret = coon.recv(1024). decode(utf-8) if ret == bye: breakprint(ret) info = input(>>>) coon.send(bytes(info.encode(utf-8)))# ret = coon.recv(1024) #聽別人說話
# print(ret) # coon.send(bhi) #和別人說話 必須傳一個bytes類型 # ret = coon.recv(1024) # print(ret.decode(utf-8)) # coon.send(bytes(大腕油潑面.encode(utf-8)))coon.close() #掛電話sk.close() #關手機#有收比有發,收發必相等client.py
import socket
sk = socket.socket() #買手機sk.connect((127.0.0.1,8080)) #撥號while True: info = input(>>>) sk.send(bytes(info,encoding=utf-8)) ret = sk.recv(1024).decode(utf-8) print(ret) if ret == bye: sk.send(bbye)break
# sk.send(bhello) # ret = sk.recv(1024) # print(ret) # sk.send(bytes(中午吃什麼.encode(utf-8))) # ret = sk.recv(1024) # print(ret.decode(utf-8))sk.close()推薦閱讀:
※【Python學習分享文章】_序列概念+字元串詳細內容
※python爬《邪不壓正》豆瓣影評
※一行代碼可以做什麼?
※未來5年,Python發展前景如何?
※python學習:最適合初學者的8本Python書籍