IO網(wǎng)絡(luò)編程

Linux 操作系統(tǒng)及其組成

  1. 操作系統(tǒng)的作用

操作系統(tǒng)(OS)是管理計算機(jī)硬件與軟件資源的計算機(jī)程序辞槐,同時也是計算機(jī)系統(tǒng)的內(nèi)核與基石谓松。操作系統(tǒng)需要處理如管理與配置內(nèi)存何恶、決定系統(tǒng)資源供需的優(yōu)先次序寄啼、控制輸入設(shè)備與輸出設(shè)備恩够、操作網(wǎng)絡(luò)與管理文件系統(tǒng)等基本事務(wù)背率。操作系統(tǒng)也提供一個讓用戶與系統(tǒng)交互的操作界面话瞧。

  1. Linux操作系統(tǒng)組成

一個典型的Linux操作系統(tǒng)組成為:Linux內(nèi)核,文件系統(tǒng)寝姿,命令行shell交排,圖形界面和桌面環(huán)境,并包各種工具和應(yīng)用軟件饵筑。

  • Linux內(nèi)核: Linux操作系統(tǒng)的核心代碼

  • 文件系統(tǒng):通常指稱管理磁盤數(shù)據(jù)的系統(tǒng)埃篓,可將數(shù)據(jù)以目錄或文件的型式存儲。每個文件系統(tǒng)都有自己的特殊格式與功能

  • shell命令: 接收用戶命令根资,然后調(diào)用相應(yīng)的應(yīng)用程序架专,并根據(jù)用戶輸入的指令來反饋給用戶指定的信息同窘。

linux.jpg

shell命令

文件操作命令

  • linux下的目錄結(jié)構(gòu)
linux_fs.jpg
作用 命令
切換工作目錄 cd
查看文件 ls , ls -l 部脚, ls -a
復(fù)制文件 cp -r
移動文件 mv
刪除文件 rm -rf 想邦, rmdir
創(chuàng)建文件夾 mkdir -p
創(chuàng)建文件 touch
查看文件內(nèi)容 cat

IO

  1. 定義

在內(nèi)存中存在數(shù)據(jù)交換的操作認(rèn)為是IO操作,比如和終端交互 ,和磁盤交互,和網(wǎng)絡(luò)交互等

  1. 程序分類
  • IO密集型程序:在程序執(zhí)行中有大量IO操作委刘,而cpu運算較少丧没。消耗cpu較少,耗時長锡移。
  • 計算密集型程序:程序運行中計算較多呕童,IO操作相對較少。cpu消耗多淆珊,執(zhí)行速度快拉庵,幾乎沒有阻塞。

文件

文件是保存在持久化存儲設(shè)備(硬盤套蒂、U盤钞支、光盤..)上的一段數(shù)據(jù)。從功能角度分為文本文件(打開后會自動解碼為字符)操刀、二進(jìn)制文件(視頻烁挟、音頻等)。在Python里把文件視作一種類型的對象骨坑,類似之前學(xué)習(xí)過的其它類型撼嗓。

字節(jié)串(bytes)

在python3中引入了字節(jié)串的概念,與str不同欢唾,字節(jié)串以字節(jié)序列值表達(dá)數(shù)據(jù)且警,更方便用來處理二進(jìn)程數(shù)據(jù)。因此在python3中字節(jié)串是常見的二進(jìn)制數(shù)據(jù)展現(xiàn)方式礁遣。

  • 普通的ascii編碼字符串可以在前面加b轉(zhuǎn)換為字節(jié)串斑芜,例如:b'hello'
  • 字符串轉(zhuǎn)換為字節(jié)串方法 :str.encode()
  • 字節(jié)串轉(zhuǎn)換為字符串方法 : bytes.decode()

文件讀寫

對文件實現(xiàn)讀寫的基本操作步驟為:打開文件,讀寫文件祟霍,關(guān)閉文件

代碼實現(xiàn): day1/file_open.py
代碼實現(xiàn): day1/file_read.py
代碼實現(xiàn): day1/file_write.py

  1. 打開文件
file_object = open(file_name, access_mode='r', buffering=-1)
功能:打開一個文件杏头,返回一個文件對象。
參數(shù):file_name  文件名沸呐;
     access_mode  打開文件的方式,如果不寫默認(rèn)為‘r’ 
          文件模式                        操作
              r                    以讀方式打開 文件必須存在
              w                    以寫方式打開
                                   文件不存在則創(chuàng)建醇王,存在清空原有內(nèi)容 
              a                    以追加模式打開 
              r+                   以讀寫模式打開 文件必須存在
              w+                   以讀寫模式打開文件
                                   不存在則創(chuàng)建,存在清空原有內(nèi)容
              a+                   以讀寫模式打開 追加模式
              rb                   以二進(jìn)制讀模式打開 同r
              wb                   以二進(jìn)制寫模式打開 同w
              ab                   以二進(jìn)制追加模式打開 同a
              rb+                  以二進(jìn)制讀寫模式打開 同r+
              wb+                  以二進(jìn)制讀寫模式打開 同w+
              ab+                  以二進(jìn)制讀寫模式打開 同a+
     buffering  1表示有行緩沖崭添,默認(rèn)則表示使用系統(tǒng)默認(rèn)提供的緩沖機(jī)制寓娩。
返回值:成功返回文件操作對象。

緩沖:系統(tǒng)自動的在內(nèi)存中為每一個正在使用的文件開辟一個緩沖區(qū),從內(nèi)存向磁盤輸出數(shù)據(jù)必須先送到內(nèi)存緩沖區(qū)棘伴,再由緩沖區(qū)送到磁盤中去寞埠。從磁盤中讀數(shù)據(jù),則一次從磁盤文件將一批數(shù)據(jù)讀入到內(nèi)存緩沖區(qū)中排嫌,然后再從緩沖區(qū)將數(shù)據(jù)送到程序的數(shù)據(jù)區(qū)。

  1. 讀取文件

read([size])
功能: 用來直接讀取文件中字符缰犁。
參數(shù): 如果沒有給定size參數(shù)(默認(rèn)值為-1)或者size值為負(fù)淳地,文件將被讀取直至末尾,給定size最多讀取給定數(shù)目個字符(字節(jié))帅容。
返回值: 返回讀取到的內(nèi)容

  • 注意:文件過大時候不建議直接讀取到文件結(jié)尾颇象,讀到文件結(jié)尾會返回空字符串。

readline([size])
功能: 用來讀取文件中一行
參數(shù): 如果沒有給定size參數(shù)(默認(rèn)值為-1)或者size值為負(fù)并徘,表示讀取一行遣钳,給定size表示最多讀取制定的字符(字節(jié))。
返回值: 返回讀取到的內(nèi)容

readlines([sizeint])
功能: 讀取文件中的每一行作為列表中的一項
參數(shù): 如果沒有給定size參數(shù)(默認(rèn)值為-1)或者size值為負(fù)麦乞,文件將被讀取直至末尾蕴茴,給定size表示讀取到size字符所在行為止。
返回值: 返回讀取到的內(nèi)容列表

文件對象本身也是一個可迭代對象姐直,在for循環(huán)中可以迭代文件的每一行倦淀。

for line in f:
     print(line)
  1. 寫入文件

write(string)
功能: 把文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)塊的字符串寫入到文件中去
參數(shù):要寫入的內(nèi)容

  • 如果需要換行要自己在寫入內(nèi)容中添加\n

writelines(str_list)
功能:接受一個字符串列表作為參數(shù),將它們寫入文件声畏。
參數(shù): 要寫入的內(nèi)容列表

  1. 關(guān)閉文件

打開一個文件后我們就可以通過文件對象對文件進(jìn)行操作了撞叽,當(dāng)操作結(jié)束后使用close()關(guān)閉這個對象可以防止一些誤操作,也可以節(jié)省資源插龄。

file_object.close()

  1. with操作

python中的with語句使用于對資源進(jìn)行訪問的場合愿棋,保證不管處理過程中是否發(fā)生錯誤或者異常都會執(zhí)行規(guī)定的“清理”操作,釋放被訪問的資源均牢,比如有文件讀寫后自動關(guān)閉糠雨、線程中鎖的自動獲取和釋放等。

with語句的語法格式如下:

with context_expression [as target(s)]:
    with-body

通過with方法可以不用close(),因為with生成的對象在語句塊結(jié)束后會自動處理徘跪,所以也就不需要close了见秤,但是這個文件對象只能在with語句塊內(nèi)使用。

with open('file','r+') as f:
    f.read()

注意

  1. 加b的打開方式讀寫要求必須都是字節(jié)串
  2. 無論什么緩沖真椿,當(dāng)程序結(jié)束或者文件被關(guān)閉時都會將緩沖區(qū)內(nèi)容寫入磁盤

其他操作

刷新緩沖區(qū)

代碼實現(xiàn): day1/buffer.py

flush()
該函數(shù)調(diào)用后會進(jìn)行一次磁盤交互鹃答,將緩沖區(qū)中的內(nèi)容寫入到磁盤。

文件偏移量

代碼實現(xiàn): day1/seek.py

  1. 定義

打開一個文件進(jìn)行操作時系統(tǒng)會自動生成一個記錄突硝,記錄中描述了我們對文件的一系列操作测摔。其中包括每次操作到的文件位置。文件的讀寫操作都是從這個位置開始進(jìn)行的。

  1. 基本操作

tell()
功能:獲取文件偏移量大小

seek(offset[,whence])
功能:移動文件偏移量位置
參數(shù):offset 代表相對于某個位置移動的字節(jié)數(shù)锋八。負(fù)數(shù)表示向前移動浙于,正數(shù)表示向后移動。
whence是基準(zhǔn)位置的默認(rèn)值為 0挟纱,代表從文件開頭算起羞酗,1代表從當(dāng)前位置算起,2 代表從文件末尾算起紊服。

  • 必須以二進(jìn)制方式打開文件時基準(zhǔn)位置才能是1或者2

文件描述符

  1. 定義

系統(tǒng)中每一個IO操作都會分配一個整數(shù)作為編號檀轨,該整數(shù)即這個IO操作的文件描述符。

  1. 獲取文件描述符

fileno()
通過IO對象獲取對應(yīng)的文件描述符

文件管理函數(shù)

  1. 獲取文件大小

os.path.getsize(file)

  1. 查看文件列表

os.listdir(dir)

  1. 查看文件是否存在

os.path.exists(file)

  1. 判斷文件類型

os.path.isfile(file)

  1. 刪除文件

os.remove(file)

網(wǎng)絡(luò)編程基礎(chǔ)

計算機(jī)網(wǎng)絡(luò)功能主要包括實現(xiàn)資源共享欺嗤,實現(xiàn)數(shù)據(jù)信息的快速傳遞参萄。

OSI七層模型

制定組織: ISO(國際標(biāo)準(zhǔn)化組織)

作用:使網(wǎng)絡(luò)通信工作流程標(biāo)準(zhǔn)化

應(yīng)用層 : 提供用戶服務(wù),具體功能有應(yīng)用程序?qū)崿F(xiàn)
表示層 : 數(shù)據(jù)的壓縮優(yōu)化加密
會話層 : 建立用戶級的連接煎饼,選擇適當(dāng)?shù)膫鬏敺?wù)
傳輸層 : 提供傳輸服務(wù)
網(wǎng)絡(luò)層 : 路由選擇讹挎,網(wǎng)絡(luò)互聯(lián)
鏈路層 : 進(jìn)行數(shù)據(jù)交換,控制具體數(shù)據(jù)的發(fā)送
物理層 : 提供數(shù)據(jù)傳輸?shù)挠布WC吆玖,網(wǎng)卡接口筒溃,傳輸介質(zhì)

優(yōu)點

  1. 建立了統(tǒng)一的工作流程
  2. 分部清晰,各司其職,每個步驟分工明確
  3. 降低了各個模塊之間的耦合度,便于開發(fā)

四層模型(TCP/IP模型)

背景 : 實際工作中工程師無法完全按照七層模型要求操作民假,逐漸演化為更符合實際情況的四層

1_tcpip模型.png

數(shù)據(jù)傳輸過程

  1. 發(fā)送端由應(yīng)用程序發(fā)送消息,逐層添加首部信息烦周,最終在物理層發(fā)送消息包。
  2. 發(fā)送的消息經(jīng)過多個節(jié)點(交換機(jī)怎顾,路由器)傳輸读慎,最終到達(dá)目標(biāo)主機(jī)。
  3. 目標(biāo)主機(jī)由物理層逐層解析首部消息包槐雾,最終到應(yīng)用程序呈現(xiàn)消息夭委。
1_TCP.png

網(wǎng)絡(luò)協(xié)議

在網(wǎng)絡(luò)數(shù)據(jù)傳輸中,都遵循的規(guī)定募强,包括建立什么樣的數(shù)據(jù)結(jié)構(gòu)株灸,什么樣的特殊標(biāo)志等。

網(wǎng)絡(luò)基礎(chǔ)概念

  • IP地址

功能:確定一臺主機(jī)的網(wǎng)絡(luò)路由位置

查看本機(jī)網(wǎng)絡(luò)地址命令: ifconfig

結(jié)構(gòu)

IPv4 點分十進(jìn)制表示 172.40.91.185 每部分取值范圍0--255
IPv6 128位 擴(kuò)大了地址范圍

  • 域名

定義: 給網(wǎng)絡(luò)服務(wù)器地址起的名字

作用: 方便記憶擎值,表達(dá)一定的含義

ping [ip] : 測試和某個主機(jī)是否聯(lián)通

  • 端口號(port)

作用:端口是網(wǎng)絡(luò)地址的一部分慌烧,用于區(qū)分主機(jī)上不同的網(wǎng)絡(luò)應(yīng)用程序。

特點:一個系統(tǒng)中的應(yīng)用監(jiān)聽端口不能重復(fù)

取值范圍: 1 -- 65535

1--1023 系統(tǒng)應(yīng)用或者大眾程序監(jiān)聽端口
1024--65535 自用端口

傳輸層服務(wù)

面向連接的傳輸服務(wù)(基于TCP協(xié)議的數(shù)據(jù)傳輸)

  1. 傳輸特征 : 提供了可靠的數(shù)據(jù)傳輸鸠儿,可靠性指數(shù)據(jù)傳輸過程中無丟失屹蚊,無失序厕氨,無差錯,無重復(fù)汹粤。

  2. 實現(xiàn)手段 : 在通信前需要建立數(shù)據(jù)連接命斧,通信結(jié)束要正常斷開連接。

三次握手(建立連接)

客戶端向服務(wù)器發(fā)送消息報文請求連接
服務(wù)器收到請求后嘱兼,回復(fù)報文確定可以連接
客戶端收到回復(fù)国葬,發(fā)送最終報文連接建立

1_三次握手.png

四次揮手(斷開連接)

主動方發(fā)送報文請求斷開連接
被動方收到請求后,立即回復(fù)芹壕,表示準(zhǔn)備斷開
被動方準(zhǔn)備就緒汇四,再次發(fā)送報文表示可以斷開
主動方收到確定,發(fā)送最終報文完成斷開

1_四次揮手.png
  1. 適用情況 : 對數(shù)據(jù)傳輸準(zhǔn)確性有明確要求哪雕,傳數(shù)文件較大船殉,需要確宾瓿茫可靠性的情況斯嚎。比如:網(wǎng)頁獲取,文件下載挨厚,郵件收發(fā)堡僻。

面向無連接的傳輸服務(wù)(基于UDP協(xié)議的數(shù)據(jù)傳輸)

  1. 傳輸特點 : 不保證傳輸?shù)目煽啃裕瑐鬏斶^程沒有連接和斷開疫剃,數(shù)據(jù)收發(fā)自由隨意钉疫。

  2. 適用情況 : 網(wǎng)絡(luò)較差,對傳輸可靠性要求不高巢价。比如:網(wǎng)絡(luò)視頻牲阁,群聊,廣播

面試要求

  • OSI七層模型介紹一下壤躲,tcp/ip模型是什么城菊?
  • tcp服務(wù)和udp服務(wù)有什么區(qū)別?
  • 三次握手和四次揮手指什么碉克,過程是怎樣的凌唬?

socket套接字編程

套接字介紹

  1. 套接字 : 實現(xiàn)網(wǎng)絡(luò)編程進(jìn)行數(shù)據(jù)傳輸?shù)囊环N技術(shù)手段

  2. Python實現(xiàn)套接字編程:import socket

  3. 套接字分類

流式套接字(SOCK_STREAM): 以字節(jié)流方式傳輸數(shù)據(jù),實現(xiàn)tcp網(wǎng)絡(luò)傳輸方案漏麦。(面向連接--tcp協(xié)議--可靠的--流式套接字)

數(shù)據(jù)報套接字(SOCK_DGRAM):以數(shù)據(jù)報形式傳輸數(shù)據(jù)客税,實現(xiàn)udp網(wǎng)絡(luò)傳輸方案。(無連接--udp協(xié)議--不可靠--數(shù)據(jù)報套接字)

tcp套接字編程

服務(wù)端流程

![address.png](https://upload-images.jianshu.io/upload_images/17443781-2bec2e70a4d97385.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

代碼實現(xiàn):day2/tcp_server.py

  1. 創(chuàng)建套接字
sockfd=socket.socket(socket_family=AF_INET,socket_type=SOCK_STREAM,proto=0)
功能:創(chuàng)建套接字
參數(shù):  socket_family  網(wǎng)絡(luò)地址類型 AF_INET表示ipv4
    socket_type  套接字類型 SOCK_STREAM(流式)  SOCK_DGRAM(數(shù)據(jù)報)
    proto  通常為0  選擇子協(xié)議
返回值: 套接字對象
  1. 綁定地址

本地地址 : 'localhost' , '127.0.0.1'
網(wǎng)絡(luò)地址 : '172.40.91.185'
自動獲取地址: '0.0.0.0'

![![1_TCP_Client.png](https://upload-images.jianshu.io/upload_images/17443781-9607dada67bd842f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](https://upload-images.jianshu.io/upload_images/17443781-598d88f2fba63cd7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
sockfd.bind(addr)
功能: 綁定本機(jī)網(wǎng)絡(luò)地址
參數(shù): 二元元組 (ip,port)  ('0.0.0.0',8888)
  1. 設(shè)置監(jiān)聽
sockfd.listen(n)
功能 : 將套接字設(shè)置為監(jiān)聽套接字撕贞,確定監(jiān)聽隊列大小
參數(shù) : 監(jiān)聽隊列大小
  1. 等待處理客戶端連接請求
connfd,addr = sockfd.accept()
功能: 阻塞等待處理客戶端請求
返回值: connfd  客戶端連接套接字
         addr  連接的客戶端地址
  1. 消息收發(fā)
data = connfd.recv(buffersize)
功能 : 接受客戶端消息
參數(shù) :每次最多接收消息的大小
返回值: 接收到的內(nèi)容

n = connfd.send(data)
功能 : 發(fā)送消息
參數(shù) :要發(fā)送的內(nèi)容  bytes格式
返回值: 發(fā)送的字節(jié)數(shù)
  1. 關(guān)閉套接字
sockfd.close()
功能:關(guān)閉套接字

客戶端流程

代碼實現(xiàn):day2/tcp_client.py

1_TCP_Client.png
  1. 創(chuàng)建套接字

注意:只有相同類型的套接字才能進(jìn)行通信

  1. 請求連接
sockfd.connect(server_addr)
功能:連接服務(wù)器
參數(shù):元組  服務(wù)器地址
  1. 收發(fā)消息

注意: 防止兩端都阻塞更耻,recv send要配合

  1. 關(guān)閉套接字

tcp 套接字?jǐn)?shù)據(jù)傳輸特點

  • tcp連接中當(dāng)一端退出,另一端如果阻塞在recv捏膨,此時recv會立即返回一個空字串酥夭。
  • tcp連接中如果一端已經(jīng)不存在,仍然試圖通過send發(fā)送則會產(chǎn)生BrokenPipeError
  • 一個監(jiān)聽套接字可以同時連接多個客戶端,也能夠重復(fù)被連接

網(wǎng)絡(luò)收發(fā)緩沖區(qū)

  1. 網(wǎng)絡(luò)緩沖區(qū)有效的協(xié)調(diào)了消息的收發(fā)速度
  2. send和recv實際是向緩沖區(qū)發(fā)送接收消息熬北,當(dāng)緩沖區(qū)不為空recv就不會阻塞疙描。

tcp粘包

代碼示例:day2/stick_send.py,stick_recv.py

原因:tcp以字節(jié)流方式傳輸,沒有消息邊界讶隐。多次發(fā)送的消息被一次接收起胰,此時就會形成粘包。

影響:如果每次發(fā)送內(nèi)容是一個獨立的含義巫延,需要接收端獨立解析此時粘包會有影響效五。

處理方法

  1. 人為的添加消息邊界
  2. 控制發(fā)送速度

UDP套接字編程

服務(wù)端流程

2_UDP_Server.png

代碼實現(xiàn):day2/udp_server.py

  1. 創(chuàng)建數(shù)據(jù)報套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
  1. 綁定地址
sockfd.bind(addr)
  1. 消息收發(fā)
data,addr = sockfd.recvfrom(buffersize)
功能: 接收UDP消息
參數(shù): 每次最多接收多少字節(jié)
返回值: data  接收到的內(nèi)容
    addr  消息發(fā)送方地址

n = sockfd.sendto(data,addr)
功能: 發(fā)送UDP消息
參數(shù): data  發(fā)送的內(nèi)容 bytes格式
    addr  目標(biāo)地址
返回值:發(fā)送的字節(jié)數(shù)
  1. 關(guān)閉套接字
sockfd.close()

客戶端流程

2_UDP_Client.png

代碼實現(xiàn):day2/udp_client.py

  1. 創(chuàng)建套接字
  2. 收發(fā)消息
  3. 關(guān)閉套接字

總結(jié) :tcp套接字和udp套接字編程區(qū)別

  1. 流式套接字是以字節(jié)流方式傳輸數(shù)據(jù),數(shù)據(jù)報套接字以數(shù)據(jù)報形式傳輸
  2. tcp套接字會有粘包炉峰,udp套接字有消息邊界不會粘包
  3. tcp套接字保證消息的完整性畏妖,udp套接字則不能
  4. tcp套接字依賴listen accept建立連接才能收發(fā)消息,udp套接字則不需要
  5. tcp套接字使用send疼阔,recv收發(fā)消息戒劫,udp套接字使用sendto,recvfrom

socket套接字屬性

代碼實現(xiàn):day2/sock_attr.py

【1】 sockfd.type 套接字類型

【2】 sockfd.family 套接字地址類型

【3】 sockfd.getsockname() 獲取套接字綁定地址

【4】 sockfd.fileno() 獲取套接字的文件描述符

【5】 sockfd.getpeername() 獲取連接套接字客戶端地址

【6】 sockfd.setsockopt(level,option,value)
功能:設(shè)置套接字選項
參數(shù): level 選項類別 SOL_SOCKET
option 具體選項內(nèi)容
value 選項值

【7】 sockfd.getsockopt(level,option)
功能 : 獲取套接字選項值

![2_網(wǎng)站訪問.png](https://upload-images.jianshu.io/upload_images/17443781-f76efc9953e69756.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

UDP套接字廣播

代碼實現(xiàn):day3/broadcast_recv.py
代碼實現(xiàn):day3/broadcast_recv.py

  • 廣播定義 : 一端發(fā)送多點接收

  • 廣播地址 : 每個網(wǎng)絡(luò)的最大地址為發(fā)送廣播的地址婆廊,向該地址發(fā)送迅细,則網(wǎng)段內(nèi)所有主機(jī)都能接收。

TCP套接字之HTTP傳輸

HTTP協(xié)議 (超文本傳輸協(xié)議)

  1. 用途 : 網(wǎng)頁獲取淘邻,數(shù)據(jù)的傳輸

  2. 特點

  • 應(yīng)用層協(xié)議茵典,傳輸層使用tcp傳輸
  • 簡單,靈活宾舅,很多語言都有HTTP專門接口
  • 無狀態(tài)统阿,協(xié)議不記錄傳輸內(nèi)容
  • http1.1 支持持久連接,豐富了請求類型
  1. 網(wǎng)頁請求過程

1.客戶端(瀏覽器)通過tcp傳輸筹我,發(fā)送http請求給服務(wù)端
2.服務(wù)端接收到http請求后進(jìn)行解析
3.服務(wù)端處理請求內(nèi)容扶平,組織響應(yīng)內(nèi)容
4.服務(wù)端將響應(yīng)內(nèi)容以http響應(yīng)格式發(fā)送給瀏覽器
5.瀏覽器接收到響應(yīng)內(nèi)容,解析展示

2_網(wǎng)站訪問.png

HTTP請求(request)

代碼實現(xiàn):day3/http_test.py
代碼實現(xiàn):day3/http_server.py

  • 請求行 : 具體的請求類別和請求內(nèi)容
    GET         /        HTTP/1.1
    請求類別   請求內(nèi)容     協(xié)議版本

請求類別:每個請求類別表示要做不同的事情

        GET : 獲取網(wǎng)絡(luò)資源
        POST :提交一定的信息崎溃,得到反饋
        HEAD : 只獲取網(wǎng)絡(luò)資源的響應(yīng)頭
        PUT : 更新服務(wù)器資源
        DELETE : 刪除服務(wù)器資源
        CONNECT
        TRACE : 測試
        OPTIONS : 獲取服務(wù)器性能信息
  • 請求頭:對請求的進(jìn)一步解釋和描述
Accept-Encoding: gzip
  • 空行
  • 請求體: 請求參數(shù)或者提交內(nèi)容

http響應(yīng)(response)

  1. 響應(yīng)格式:響應(yīng)行蜻直,響應(yīng)頭,空行袁串,響應(yīng)體
  • 響應(yīng)行 : 反饋基本的響應(yīng)情況
HTTP/1.1     200       OK
版本信息    響應(yīng)碼   附加信息

響應(yīng)碼 :

1xx  提示信息概而,表示請求被接收
2xx  響應(yīng)成功
3xx  響應(yīng)需要進(jìn)一步操作,重定向
4xx  客戶端錯誤
5xx  服務(wù)器錯誤
  • 響應(yīng)頭:對響應(yīng)內(nèi)容的描述
Content-Type: text/html
  • 響應(yīng)體:響應(yīng)的主體內(nèi)容信息

struct模塊的使用

代碼實現(xiàn):day3/struct_recv.py
代碼實現(xiàn):day3/struct_send.py

  1. 原理: 將一組簡單數(shù)據(jù)進(jìn)行打包囱修,轉(zhuǎn)換為bytes格式發(fā)送赎瑰。或者將一組bytes格式數(shù)據(jù)破镰,進(jìn)行解析餐曼。

  2. 接口使用

Struct(fmt)
功能: 生成結(jié)構(gòu)化對象
參數(shù):fmt  定制的數(shù)據(jù)結(jié)構(gòu)

st.pack(v1,v2,v3....)
功能: 將一組數(shù)據(jù)按照指定格式打包轉(zhuǎn)換為bytes
參數(shù):要打包的數(shù)據(jù)
返回值: bytes字節(jié)串

st.unpack(bytes_data)
功能: 將bytes字節(jié)串按照指定的格式解析
參數(shù): 要解析的字節(jié)串
返回值: 解析后的內(nèi)容

struct.pack(fmt,v1,v2,v3...)
struct.unpack(fmt,bytes_data)

說明: 可以使用struct模塊直接調(diào)用pack unpack压储。此時這兩函數(shù)第一個參數(shù)傳入fmt。其他用法功能相同

4_struct.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末源譬,一起剝皮案震驚了整個濱河市集惋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踩娘,老刑警劉巖刮刑,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異养渴,居然都是意外死亡雷绢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門理卑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翘紊,“玉大人,你說我怎么就攤上這事藐唠》保” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵中捆,是天一觀的道長鸯匹。 經(jīng)常有香客問我坊饶,道長泄伪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任匿级,我火速辦了婚禮蟋滴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痘绎。我一直安慰自己津函,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布孤页。 她就那樣靜靜地躺著尔苦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪行施。 梳的紋絲不亂的頭發(fā)上允坚,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音蛾号,去河邊找鬼稠项。 笑死,一個胖子當(dāng)著我的面吹牛鲜结,可吹牛的內(nèi)容都是我干的展运。 我是一名探鬼主播活逆,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拗胜!你這毒婦竟也來了蔗候?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埂软,失蹤者是張志新(化名)和其女友劉穎琴庵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仰美,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡迷殿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咖杂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庆寺。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诉字,靈堂內(nèi)的尸體忽然破棺而出懦尝,到底是詐尸還是另有隱情,我是刑警寧澤壤圃,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布陵霉,位于F島的核電站,受9級特大地震影響伍绳,放射性物質(zhì)發(fā)生泄漏踊挠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一冲杀、第九天 我趴在偏房一處隱蔽的房頂上張望效床。 院中可真熱鬧,春花似錦权谁、人聲如沸剩檀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沪猴。三九已至,卻和暖如春采章,著一層夾襖步出監(jiān)牢的瞬間运嗜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工共缕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留洗出,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓图谷,卻偏偏與公主長得像翩活,于是被迫代替她去往敵國和親阱洪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容