網路編程協議(TCP和UDP協議,粘包問題)

来源:https://www.cnblogs.com/fu-1111/archive/2019/01/04/10222622.html
-Advertisement-
Play Games

網路編程協議 1.osi七層模型 應用層 表示層 會話層 傳輸層 網路層 數據鏈路層 物理層 2.套接字 socket 有兩類,一種基於文件類型,一種基於網路類型 3.Tcp和udp協議 Tcp協議:面向連接,數據可靠,傳輸效率低,面向位元組流 建立連接與斷開連接的過程(三次握手,四次揮手) 建立連接 ...


網路編程協議

1.osi七層模型

應用層  表示層  會話層  傳輸層  網路層  數據鏈路層  物理層

2.套接字 socket 

有兩類,一種基於文件類型,一種基於網路類型

3.Tcp和udp協議

Tcp協議:面向連接,數據可靠,傳輸效率低,面向位元組流

 建立連接與斷開連接的過程(三次握手,四次揮手)

 建立連接:1.客戶端先發出消息到服務端,請求連接

      2.服務端收到信息後,給客戶端反饋一個信息,等待客戶端回覆

      3.客戶端收到服務端的反饋信息後,再像服務端發出收到消息,連接建立

 斷開連接:1.客戶端先發出消息到服務端,請求斷開連接

      2.服務端先發送一個信息,讓客戶端進行等待服務端處理通道中的數據

      3.服務端處理完通道中的數據,給客戶端發送一個信息,表示已經處理完數據,等待客戶端回覆

      4.客戶端收到消息後,給服務端發送一個回覆信息,服務端收到後,斷開連接

Udp協議:面向無連接,數據不可靠,傳輸效率高,面向報文

Tcp和udp協議下的socket

Tcp長連接的一些問題 

  會出現粘包現象,這種現象是由緩衝區引起的

緩衝區:  將程式和網路解耦

輸入緩衝區

輸出緩衝區

Import Subprocess

    sub_obj = subprocess.Popen(

        ‘dir’,

        shell=True,

        stdout=subprocess.PIPE,  #正確結果的存放位置

        stderr=subprocess.PIPE   #錯誤結果的存放位置

 )

兩種粘包現象:

1 連續的小包可能會被優化演算法給組合到一起進行發送

2 第一次如果發送的數據大小2000B,接收端一次性接受大小為1024B,這就導致剩下的內容會被下一次recv接收到,導致結果錯亂

解決粘包的方法:

方案一:由於雙方不知道對方發送數據的長度,導致接收的時候,可能接收不全,或者多接收另外一次發送的信息內容,所以在發送真實數據之前,要先發送數據的長度,接收端根據長度來接收後面的真實數據,但是雙方有一個交互確認的過程

方案二:

使用Struct模塊,在發送前,把文件的大小打包,做成報頭,把報頭放在文件真實內容之前;在接收時,對發送過來的文件進行解包,然後列印文件真實內容.

打包:struct.pack(‘i’,長度)

解包:struct.unpack(‘i’,位元組)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設計模式代表了最佳實踐,是開發人員在開發過程中面臨的一般問題的解決方案。這些解決方案是眾多開發人員經過相當長的一段時間的試驗和錯誤總結出來的 歷史 設計模式是一套被反覆使用,經過考驗的設計經驗的總結。使用設計模式是為了重用代碼,增強代碼的可讀性。 1994年,由Gang of Four在《設計模式 ...
  • 什麼是 Nacos? Nacos 是阿裡巴巴推出來的一個新開源項目,這是一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。 Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。 Nacos ...
  • 介面體現的是一種規範和實現分離的設計哲學,充分利用介面可以極大的降低程式中各個模塊之間的耦合,提高系統的可維護性以及可擴展性。 ...
  • 對於大部分的對象而言,程式里會有一個引用變數來引用該對象,這是最常見的引用方法。除此之外,java.lang.ref包下還提供了3個類:SoftReference、WeakReference和PhantomReference。它們分別代表了系統對對象的另外3中引用方式:軟引用、弱引用和虛引用。 ...
  • 文/沉默王二 開門見山地說吧,Java提供了一套完整的集合類(也可以叫做容器類)來管理一組長度可變的對象(也就是集合的元素),其中常見的類型包括List、Set、Queue和Map。從我個人的編程經驗來看,List的實現類ArrayList和Map的實現類HashMap使用頻率最高,其它實現類只能望 ...
  • /*懶漢模式 *優點:延遲載入 * 缺點:不加同步的懶漢模式是線程不安全的,加了synchronzide之後就變成線程安全的了 */public class Singleton { private static Singleton singleton=null; private Singleton( ...
  • Django 系列博客(二) 前言 今天博客的內容為使用 Django 完成第一個 Django 頁面,併進行一些簡單頁面的搭建和轉跳。 命令行搭建 Django 項目 創建純凈虛擬環境 在上一篇博客中已經安裝好了虛擬環境,所以用虛擬環境來安裝指定版本的 Django。為了可以從頭到尾的走一遍流程, ...
  • 計數器 Counter 計數元素迭代器 elements() 計數對象拷貝 copy() 計數對象清空 clear() 有序字典 OrderedDict (對字典的補充,可以記住字典元素添加的順序) 預設字典 defaultdict,(指定字典值的類型) 可命名元組 namedtuple (給元組對 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...