Linux 操作系統(tǒng)及其組成
- 操作系統(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)交互的操作界面话瞧。
- 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ù)用戶輸入的指令來反饋給用戶指定的信息同窘。
shell命令
文件操作命令
- linux下的目錄結(jié)構(gòu)
作用 | 命令 |
---|---|
切換工作目錄 | cd |
查看文件 | ls , ls -l 部脚, ls -a |
復(fù)制文件 | cp -r |
移動文件 | mv |
刪除文件 | rm -rf 想邦, rmdir |
創(chuàng)建文件夾 | mkdir -p |
創(chuàng)建文件 | touch |
查看文件內(nèi)容 | cat |
IO
- 定義
在內(nèi)存中存在數(shù)據(jù)交換的操作認(rèn)為是IO操作,比如和終端交互 ,和磁盤交互,和網(wǎng)絡(luò)交互等
- 程序分類
- 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
- 打開文件
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ū)。
- 讀取文件
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)
- 寫入文件
write(string)
功能: 把文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)塊的字符串寫入到文件中去
參數(shù):要寫入的內(nèi)容
- 如果需要換行要自己在寫入內(nèi)容中添加\n
writelines(str_list)
功能:接受一個字符串列表作為參數(shù),將它們寫入文件声畏。
參數(shù): 要寫入的內(nèi)容列表
- 關(guān)閉文件
打開一個文件后我們就可以通過文件對象對文件進(jìn)行操作了撞叽,當(dāng)操作結(jié)束后使用close()關(guān)閉這個對象可以防止一些誤操作,也可以節(jié)省資源插龄。
file_object.close()
- 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()
注意
- 加b的打開方式讀寫要求必須都是字節(jié)串
- 無論什么緩沖真椿,當(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
- 定義
打開一個文件進(jìn)行操作時系統(tǒng)會自動生成一個記錄突硝,記錄中描述了我們對文件的一系列操作测摔。其中包括每次操作到的文件位置。文件的讀寫操作都是從這個位置開始進(jìn)行的。
- 基本操作
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
文件描述符
- 定義
系統(tǒng)中每一個IO操作都會分配一個整數(shù)作為編號檀轨,該整數(shù)即這個IO操作的文件描述符。
- 獲取文件描述符
fileno()
通過IO對象獲取對應(yīng)的文件描述符
文件管理函數(shù)
- 獲取文件大小
os.path.getsize(file)
- 查看文件列表
os.listdir(dir)
- 查看文件是否存在
os.path.exists(file)
- 判斷文件類型
os.path.isfile(file)
- 刪除文件
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)點
- 建立了統(tǒng)一的工作流程
- 分部清晰,各司其職,每個步驟分工明確
- 降低了各個模塊之間的耦合度,便于開發(fā)
四層模型(TCP/IP模型)
背景 : 實際工作中工程師無法完全按照七層模型要求操作民假,逐漸演化為更符合實際情況的四層
數(shù)據(jù)傳輸過程
- 發(fā)送端由應(yīng)用程序發(fā)送消息,逐層添加首部信息烦周,最終在物理層發(fā)送消息包。
- 發(fā)送的消息經(jīng)過多個節(jié)點(交換機(jī)怎顾,路由器)傳輸读慎,最終到達(dá)目標(biāo)主機(jī)。
- 目標(biāo)主機(jī)由物理層逐層解析首部消息包槐雾,最終到應(yīng)用程序呈現(xiàn)消息夭委。
網(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ù)傳輸)
傳輸特征 : 提供了可靠的數(shù)據(jù)傳輸鸠儿,可靠性指數(shù)據(jù)傳輸過程中無丟失屹蚊,無失序厕氨,無差錯,無重復(fù)汹粤。
實現(xiàn)手段 : 在通信前需要建立數(shù)據(jù)連接命斧,通信結(jié)束要正常斷開連接。
三次握手(建立連接)
客戶端向服務(wù)器發(fā)送消息報文請求連接
服務(wù)器收到請求后嘱兼,回復(fù)報文確定可以連接
客戶端收到回復(fù)国葬,發(fā)送最終報文連接建立
四次揮手(斷開連接)
主動方發(fā)送報文請求斷開連接
被動方收到請求后,立即回復(fù)芹壕,表示準(zhǔn)備斷開
被動方準(zhǔn)備就緒汇四,再次發(fā)送報文表示可以斷開
主動方收到確定,發(fā)送最終報文完成斷開
- 適用情況 : 對數(shù)據(jù)傳輸準(zhǔn)確性有明確要求哪雕,傳數(shù)文件較大船殉,需要確宾瓿茫可靠性的情況斯嚎。比如:網(wǎng)頁獲取,文件下載挨厚,郵件收發(fā)堡僻。
面向無連接的傳輸服務(wù)(基于UDP協(xié)議的數(shù)據(jù)傳輸)
傳輸特點 : 不保證傳輸?shù)目煽啃裕瑐鬏斶^程沒有連接和斷開疫剃,數(shù)據(jù)收發(fā)自由隨意钉疫。
適用情況 : 網(wǎng)絡(luò)較差,對傳輸可靠性要求不高巢价。比如:網(wǎng)絡(luò)視頻牲阁,群聊,廣播
面試要求
- OSI七層模型介紹一下壤躲,tcp/ip模型是什么城菊?
- tcp服務(wù)和udp服務(wù)有什么區(qū)別?
- 三次握手和四次揮手指什么碉克,過程是怎樣的凌唬?
socket套接字編程
套接字介紹
套接字 : 實現(xiàn)網(wǎng)絡(luò)編程進(jìn)行數(shù)據(jù)傳輸?shù)囊环N技術(shù)手段
Python實現(xiàn)套接字編程:import socket
套接字分類
流式套接字(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ù)端流程
代碼實現(xiàn):day2/tcp_server.py
- 創(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é)議
返回值: 套接字對象
- 綁定地址
本地地址 : 'localhost' , '127.0.0.1'
網(wǎng)絡(luò)地址 : '172.40.91.185'
自動獲取地址: '0.0.0.0'
sockfd.bind(addr)
功能: 綁定本機(jī)網(wǎng)絡(luò)地址
參數(shù): 二元元組 (ip,port) ('0.0.0.0',8888)
- 設(shè)置監(jiān)聽
sockfd.listen(n)
功能 : 將套接字設(shè)置為監(jiān)聽套接字撕贞,確定監(jiān)聽隊列大小
參數(shù) : 監(jiān)聽隊列大小
- 等待處理客戶端連接請求
connfd,addr = sockfd.accept()
功能: 阻塞等待處理客戶端請求
返回值: connfd 客戶端連接套接字
addr 連接的客戶端地址
- 消息收發(fā)
data = connfd.recv(buffersize)
功能 : 接受客戶端消息
參數(shù) :每次最多接收消息的大小
返回值: 接收到的內(nèi)容
n = connfd.send(data)
功能 : 發(fā)送消息
參數(shù) :要發(fā)送的內(nèi)容 bytes格式
返回值: 發(fā)送的字節(jié)數(shù)
- 關(guān)閉套接字
sockfd.close()
功能:關(guān)閉套接字
客戶端流程
代碼實現(xiàn):day2/tcp_client.py
- 創(chuàng)建套接字
注意:只有相同類型的套接字才能進(jìn)行通信
- 請求連接
sockfd.connect(server_addr)
功能:連接服務(wù)器
參數(shù):元組 服務(wù)器地址
- 收發(fā)消息
注意: 防止兩端都阻塞更耻,recv send要配合
- 關(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ū)
- 網(wǎng)絡(luò)緩沖區(qū)有效的協(xié)調(diào)了消息的收發(fā)速度
- send和recv實際是向緩沖區(qū)發(fā)送接收消息熬北,當(dāng)緩沖區(qū)不為空recv就不會阻塞疙描。
tcp粘包
代碼示例:day2/stick_send.py,stick_recv.py
原因:tcp以字節(jié)流方式傳輸,沒有消息邊界讶隐。多次發(fā)送的消息被一次接收起胰,此時就會形成粘包。
影響:如果每次發(fā)送內(nèi)容是一個獨立的含義巫延,需要接收端獨立解析此時粘包會有影響效五。
處理方法
- 人為的添加消息邊界
- 控制發(fā)送速度
UDP套接字編程
服務(wù)端流程
代碼實現(xiàn):day2/udp_server.py
- 創(chuàng)建數(shù)據(jù)報套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
- 綁定地址
sockfd.bind(addr)
- 消息收發(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ù)
- 關(guān)閉套接字
sockfd.close()
客戶端流程
代碼實現(xiàn):day2/udp_client.py
- 創(chuàng)建套接字
- 收發(fā)消息
- 關(guān)閉套接字
總結(jié) :tcp套接字和udp套接字編程區(qū)別
- 流式套接字是以字節(jié)流方式傳輸數(shù)據(jù),數(shù)據(jù)報套接字以數(shù)據(jù)報形式傳輸
- tcp套接字會有粘包炉峰,udp套接字有消息邊界不會粘包
- tcp套接字保證消息的完整性畏妖,udp套接字則不能
- tcp套接字依賴listen accept建立連接才能收發(fā)消息,udp套接字則不需要
- 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)
功能 : 獲取套接字選項值
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é)議)
用途 : 網(wǎng)頁獲取淘邻,數(shù)據(jù)的傳輸
特點
- 應(yīng)用層協(xié)議茵典,傳輸層使用tcp傳輸
- 簡單,靈活宾舅,很多語言都有HTTP專門接口
- 無狀態(tài)统阿,協(xié)議不記錄傳輸內(nèi)容
- http1.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)容,解析展示
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)
- 響應(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
原理: 將一組簡單數(shù)據(jù)進(jìn)行打包囱修,轉(zhuǎn)換為bytes格式發(fā)送赎瑰。或者將一組bytes格式數(shù)據(jù)破镰,進(jìn)行解析餐曼。
接口使用
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。其他用法功能相同