網絡通信 粘包和 緩沖器
阿新 • • 發佈:2018-10-17
就會 客戶 tcp 大小 .so 輸出緩沖區 發送消息 並且 緩沖器
tcp:
屬於長連接,與一個客戶端進行連接了以後,其他的客戶端要等待,要連接另外一個,必須優雅的斷開前面這個客戶端的連接.
允許地址重用:在bind IP地址和端口之前加上,# server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 允許(IP地址和端口)地址重用
緩沖區
輸入緩沖區 #recv
輸出緩沖區 #send
粘包(tcp的兩種粘包現象)
1 連續發送小的數據,並且每次發送之間的時間間隔很短(輸出緩沖區:兩個消息在緩沖區黏在一起了)
原因是TCP為了傳輸效率,做了一個優化算法(Nagle),減少連續的小包發送(因為每個消息被包裹以後,都會有兩個過程:1 組包 2拆包)
2 第一次服務端發送的數據比我客戶端設置的一次接收消息的大小要大,那麽接收不完,第二次再接收的時候,就會將第一次剩余的消息接收到
粘包的根本原因是因為:雙方不知道對方發送消息的大小
解決方案一:
發送消息之前,先計算要發送消息的長度,然後先將消息長度發送過去,對方給你回一個確認收到長度的信息,然後根據接收到的消息長度來修改自己一次接收消息的大小
這個過程多了一次交互
網絡通信 粘包和 緩沖器