網路編程

網路編程

來自專欄 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 use

sk.bind((127.0.0.1,8080))#綁定手機卡 ip port

sk.listen() #監聽 等著有人打電話

coon,addr = sk.accept()#接到別人的電話cnnnection連接 address 地址(別人的地址)

print(addr)

while True:

ret = coon.recv(1024).

decode(utf-8)

if ret == bye:

break

print(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書籍

TAG:網路編程 | 計算機網路 | Python |