IPC之套接字

来源:https://www.cnblogs.com/liming-linux-python/archive/2019/06/28/11103978.html
-Advertisement-
Play Games

IPC(Inter-Process Communication,進程間通信)實現方式 1)管道: - 管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程之間使用(進程的親緣關係通常是指父子進程關係) 2)有名管道(FIFO): - 有名管道也是半雙工的通信方式,但是允許在沒有 ...


IPC(Inter-Process Communication,進程間通信)實現方式

  1)管道:

    - 管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程之間使用(進程的親緣關係通常是指父子進程關係)
  2)有名管道(FIFO):
    - 有名管道也是半雙工的通信方式,但是允許在沒有親緣關係的進程之間使用,管道是先進先出的通信方式
  3)信號量:
    - 信號量是一個計數器,可以用來控制多個進程對共用資源的訪問
    - 它常作為一種鎖機制,防止某進程正在訪問共用資源時,其他進程也訪問該資源
    - 因此,主要作為進程間以及同一進程內不同線程之間的同步手段
  4)消息隊列:
    - 消息隊列是有消息的鏈表,存放在內核中,並由消息隊列標識符標識
    - 消息隊列剋服了信號傳遞信息少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點
  5)信號 ( Sinal ) :
    - 信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生
  6)共用記憶體( Shared Memory) :
    - 共用記憶體就是映射一段能被其他進程所訪問的記憶體,這段共用記憶體由一個進程創建,但多個進程都可以訪問
    - 共用記憶體是最快的IPC實現機制,它是針對其它進程間通信方式運行效率低而專門設計的
    - 往往與其他通信機制(如信號量)配合使用,來實現進程間的同步和通信
  7)套接字( Socket ) :
    - 套接字也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同機器間的進程通信

 

套接字通信

1、基本介紹
  1)網路上的兩個進程通過一個雙向的通信連接實現數據交換,這個連接的一端就是一個套接字
  2)其目的就是:允許位於同一主機或不同主機上的不同進程之間進行通信,以實現數據交換
  3)套接字本質是通過編程介面(API)對TCP/IP的封裝,TCP/IP也要提供可供程式員做網路開發所用的介面,這就是 Socket API
  4)HTTP協議可以理解為轎車,其提供了封裝或者顯示數據的具體形式;Socket可以理解為發動機,提供了網路通信的能力
  5)進程使用埠需要向內核申請註冊,內核通過【套接字、埠】標記進程
  6)相關鏈接:https://www.linuxprobe.com/socket-agreement-overview.html?comefrom=http://blogread.cn/news/
  7)相關圖示:

2、套接字類型
  1)根據其使用的傳輸層協議不同:
    - SOCK_STREAM:TCP套接字,使用TCP埠
    - SOCK_DGRAM:UDP套接字,使用UDP埠
    - SOCK_RAM:RAM套接字,裸套接字,不使用TCP埠或UDP埠,直接將IP報文封裝後傳輸給目標主機
  2)根據其使用的地址不同,可分為多個 Socket Domain:
    - AF_INET:使用IPV4地址,AF(Address Family)
    - AF_INET6 :使用IPV6地址
    - AF_UNIX:同一主機上的不同進程間進行通信時使用此類,效率更高,不占用TCP/IP協議棧,不需要解封裝

3、深入瞭解
  1)對於TCP、UDP套接字來說,一個IP地址擁有65536(0~65535)個埠(TCP協議頭部使用16位來保存埠號)
  2)0埠是保留埠,無論是TCP還是UDP都是不能使用的,可以監聽於0埠,但內核會在bind時,指定一個隨機可用埠來監聽
  3)多個客戶端通過某一隨機埠與服務端的指定監聽埠建立套接字,服務端僅需使用一個套接字即可,但是連接需要用文件描述符來標識,雖然不受套接字數量的限制,但會受到文件描述符數量的限制
  4)此外,如果服務端以反向代理方式工作時,雖然其僅需使用一個套接字就可以與多個客戶端建立連接,但是其還要與後端節點建立連接,如果通過TCP、UDP套接字與後端節點通信,則會受到套接字的數量限制
  5)相關鏈接
    - http://www.360doc.com/content/14/0606/16/3300331_384326124.shtml
    - https://mp.weixin.qq.com/s/vaURXrvafNBzBxmEiuaGOQ

4、SocketAPI(封裝了內核中的套接字通信相關的系統調用)
  1)介紹:
    - socket():創建一個套接字
    - bind():將套接字和進程綁定在一起(即使用)
    - listen():監聽在套接字上
    - accept():接收請求
    - connect():請求建立連接(一般是客戶端請求)
    - write():發送數據(向此套接字寫入數據也就會發送至對端套接字)
    - read():接收數據
    - close():請求關閉連接
  2)圖示:

 






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

-Advertisement-
Play Games
更多相關文章
  • 1.需要實現的效果如圖 2.解決方案 1).給TreeViewItem中添加children,children為包含一個stackpanel,在stackpanel中包含Image和TextBlock兩個控制項。 ...
  • 一、可以使用位於命名空間System.Threading中的Thrad類開啟線程: 1.通過Thread類的靜態屬性CurrentThread可以獲取執行當前函數所在的線程,通過實例屬性ManagedThreadId可以查看當前線程的唯一標識符ID,通過實例屬性Name可以獲取或設置當前線程的名稱; ...
  • 在 WPF 里,我們是可以在 RelativeSource 上面實現的,舉個例子: 將 RelativeSource 的 Mode 設置為 FindAncestor 就可以了。AncestorType 代表綁定的類型,AncestorLevel 代表查詢第幾個,預設是 1。所以在上面的例子里,由於 ...
  • [toc] 用戶身份切換 如何在普通用戶的情況下,完成日常工作? 1) 切換用戶,使用普通用戶登錄,然後使用su命令切換到root。 優點:簡單,方便 缺點:需要知道root密碼,不安全,切換到root沒有日誌審計功能 2) 提權,當需要使用root許可權時,進行提權,而無需切換至root用戶。 優點 ...
  • 環境:centos7.4 1:在root目錄里ssh-keygen,使用簡易配置,全部直接回車即可。會在/root/.ssh/生成三個文件id_rsa id_rsa.pub known_hosts 2:複製其他節點的key到本地,只需要在一個當前生成key的節點執行即可:ssh-copy-id ro ...
  • 基本介紹 1)WEB服務僅能處理靜態請求,如果處理動態請求則需要對應的動態資源服務軟體,即:應用程式服務軟體 2)常見的應用服務軟體有:PHP、Java、Python等 3)問題:WEB服務如何與外部應用程式通信?通常有以下幾種方案: - CGI協議:基本沒人使用,不安全以及性能極其低下 - 模塊方 ...
  • I/O介紹 1)I/O(Input/Output),即輸入/輸出,分為IO設備和IO介面兩個部分 2)IO分類: • 網路IO:網路IO的本質是socket的讀取,socket在linux系統被抽象為流,IO可以理解為對流的操作 • 磁碟IO:文件的一次讀寫操作就會發生IO操作 3)IO操作類型: ...
  • 1. 概述 業務軟體設計開發過程中會依賴一些基礎組件, 事件路由就是常見的基礎組件。 本模塊結合業務場景, 定製了一個基本的事件路由模塊。 本文主要介紹了事件路由模塊及其使用方法, 用於指導用戶開發。 2. 架構原理 事件路由模塊, 提供了一種事件分發的框架。 用戶可以自己定義事件以及事件的處理策略 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...