1. 程式人生 > >網路收發緩衝區,基於udp的通訊,udp套接字應用之廣播

網路收發緩衝區,基於udp的通訊,udp套接字應用之廣播

recv()特徵
1. 如果連線端斷開,recv會立即結束阻塞返回空字串
2. 當接收緩衝區為空時會阻塞
3. 如果recv一次接受不完緩衝區內容,下次會繼續接收,確保資料不丟失

send()特性
1.如果另一端不存在還試圖使用send進行傳送則會產生BrokenPipeError異常
2.當傳送緩衝區滿時會阻塞
sendall(data)
功能::TCP套接字傳送訊息


網路收發緩衝區

*緩衝區的功能 : 協調讀寫速度,減少和磁碟互動

recv和send實際上是從緩衝區內獲取內容,和向緩衝區傳送內容

tcp粘包

產生原因:tcp傳輸採用位元組流的方式,訊息之間沒有邊界,如果傳送和接受速度不匹配,會造成多次傳送的內容被一次接受,形成意義上的誤解即粘包

產生條件 : 當使用send快速的連續傳送極有可能產生粘包。

影響: 如果每次傳送的內容代表一個獨立的意思,此時產生粘包需要處理。但是如果多次傳送的內容本身就是一個連續的整體,此時就不需要處理。

如何處理 : 
1. 每次傳送後加一個結尾標誌,接收端通過標誌進行判斷
2. 傳送一個數據結構
3. 每次傳送中間有一個短暫的延遲

基於udp的通訊

服務端
1. 建立套接字 ---》 資料報套接字
sockfd = socket(AF_INET,SOCK_DGRAM)

2. 繫結服務端地址
sockfd.bind()

3. 訊息的收發

data,addr = recvfrom(buffersize)
功能 : 接受udp訊息
引數 : 每次最多接收訊息的大小
返回值 : data  接收到的訊息
          addr  訊息傳送者的地址

sockfd.sendto(data,addr)
功能: udp傳送訊息
引數: data要傳送的訊息   bytes
       addr 目標地址
返回值 : 傳送的位元組

4.關閉套接字
sockfd.close()

cookie ,

sys.argv
功能 : 獲取來自命令列的引數,形成一個列表

* 以空格作為每一項分隔,如果一項中有空格則用引號表示一個整體

* 命令列內容均作為字串傳入

udp客戶端
1. 建立套接字
2. 訊息收發
3. 關閉套接字

tcp流式套接字 和 udp資料報套接字 區別
1. 流式套接字採用位元組流的方式傳輸資料,而資料報套    接字以資料報形式傳輸
2. tcp會產生粘包現象,udp訊息是有邊界的不會粘包
3. tcp傳輸是建立在連線的基礎上,保證傳輸的可靠性    ,而udp一次接受一個數據報,不保證完整性
4. tcp需要依賴listen accept建立連線,udp不用
5. tcp 收發訊息使用recv send udp用recvfrom sendto

補充:

sendall()
功能 : 同send() 作為tcp訊息傳送
引數 : 同send()
返回值 : 傳送成功返回None ,傳送失敗返回異常

socket模組和套接字屬性

(s表示一個套接字物件)

s.type  :  獲取套接字型別
s.family : 獲取地址族型別

s.fileno()
功能 : 獲取套接字的檔案描述符
檔案描述符 :每一個IO作業系統都會為其分配一個不同 的正整數,該正整數即為此IO操作的檔案描述符。 

s.getsockname()
功能 : 獲取套接字繫結地址

s.getpeername()
功能 : 獲取連線套接字另一端的地址

s.setsockopt(level,optname,value)
功能:設定套接字選項  豐富修改原有套接字功能
引數: level : 獲取選項的型別
       optname : 每個選項型別中的子選項
       value :  為選項設定值
       
s.getsockopt(level,optname)
功能 : 獲取套接字選項的值


udp套接字應用之廣播

一點發送多點接收

目標地址 : 廣播地址,每個網段內最大的地址
172.60.50.255   ----》 <broadcast>

cookie 
format()
功能:合成字串


tcp應用之HTTP傳輸

http協議 ---》 超文字傳輸協議   應用層協議

用途 : 網頁的獲取,基於網站的資料傳輸
        基於http協議的資料傳輸

特點: 
1. 應用層協議,傳輸層使用tcp傳輸
2. 簡單靈活,和多種語言對接方便
3. 無狀態協議,不記錄使用者的通訊內容
4. 成熟穩定 http1.1 

工作模式 : 
* 使用http雙方均遵循http協議規定傳送接收訊息體
* 請求方,根據協議組織請求內容傳送給對方
* 服務方,收到內容按照協議解析
* 服務方,將回復內容按照協議組織傳送給請求方
* 請求方,收到回覆根據協議解析

http請求
http響應