每天3分鐘操作系統修煉秘籍(17):進程間通信(3):套接字

来源:https://www.cnblogs.com/f-ck-need-u/archive/2019/11/18/11881464.html
-Advertisement-
Play Games

"點我查看秘籍連載" 套接字 套接字(Socket)用於協調不同電腦上的進程間通信,也就是基於網路的通信。當然,也可以在本機上使用套接字進行進程間的通信。 套接字通信的方式非常多,有Unix域套接字、TCP套接字、UDP套接字、鏈路層套接字等等。但最常用的肯定是TCP套接字。所以,這裡介紹下TCP ...


點我查看秘籍連載

套接字

套接字(Socket)用於協調不同電腦上的進程間通信,也就是基於網路的通信。當然,也可以在本機上使用套接字進行進程間的通信。

套接字通信的方式非常多,有Unix域套接字、TCP套接字、UDP套接字、鏈路層套接字等等。但最常用的肯定是TCP套接字。所以,這裡介紹下TCP Socket通信方式,稍後再單獨介紹Unix域套接字。

TCP Socket用於客戶端、服務端的基於TCP協議的通信,所以在客戶端和服務端均需要創建一個套接字。創建TCP套接字時會返回這個套接字的文件描述符,可通過這個文件描述符對套接字進行讀和寫操作。

對比一下,當一個程式需要對一個磁碟文件同時進行讀寫操作(在命令行下似乎沒有找到這種命令,但通過編程方式是很容易實現的)時,由於只通過單個文件描述符同時負責讀和寫,很可能需要通過不斷移動文件指針的方式來改變讀寫的位置,否則數據很容易錯亂。

而TCP套接字也是通過單個文件描述符進行讀寫套接字的,為了保證讀和寫的位置不錯亂,操作系統在內核空間為每個TCP套接字維護了兩個buffer空間,一個buffer用於寫、一個buffer用於讀。提供讀的buffer空間稱為recv buffer,提供寫的buffer空間稱為send buffer,它們統稱為socket buffer

所以,服務端和客戶端通過兩個套接字通信就簡單了,一端向send buffer寫數據,該buffer的數據會通過已經建立好的TCP連接發送到另一端的recv buffer,於是另一端只需從recv buffer中讀數據即可實現不同電腦上的進程間通信。過程如圖。

Unix域套接字

Unix域套接字是套接字的一種,用於本機進程間通信,一般用來實現雙向通信的管道。Unix域套接字是比網路套接字輕量級且高效的多,因為它不涉及網路通信,不需要監聽連接,不需要綁定地址,不需要關心協議類型,等等。

創建Unix域套接字後返回兩個文件描述符,這兩個文件描述符均對套接字可讀、可寫,從而實現全雙工的雙向通信。

同樣的,為了避免使用單個文件描述符同時讀、寫造成的數據錯亂,Unix域套接字也有兩個buffer空間。


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

-Advertisement-
Play Games
更多相關文章
  • 一、設置倉庫 1.更新apt包索引 apt-get update apt-get update 2.安裝軟體包,使它允許apt通過HTTPS使用倉庫 apt-get install apt-transport-https ca-certificates curl software-propertie ...
  • 在創建Shell腳本時,必須在文件的第一行指定要使用的shell。格式為:#!/bin/bash 除了第一行外,在shell腳本中井號(#)用作註釋行 若出現錯誤:command not found 原因是shell腳本文件所處的目錄沒有添加到PATH環境變數中 解決方法:1.將shell腳本文件所 ...
  • Linux問題記錄——主機名變成了bogon 摘要:本文主要記錄了主機名變成bogon的原因以及解決辦法。 問題重現 主機名在一次登錄後,變成了bogon,此後每次登錄Linux系統時都是bogon。 1 Connecting to 192.168.35.128:22... 2 Connection ...
  • 一 部署 kube-proxy kube-proxy 運行在所有節點上,它監聽 apiserver 中 service 和 endpoint 的變化情況,創建路由規則以提供服務 IP 和負載均衡功能。 1.1 安裝kube-proxy 提示:k8smaster01節點已下載相應二進位,可直接分發至n ...
  • 回到目錄 1. 恆流源 (1)簡易恆流源 用BJT晶體管可以構造一個簡易的恆流源,實現電路如下: 圖3-11.01 前面我們在射極放大電路的分壓偏置時講過,分壓偏置具有非常好的穩定性,幾乎不受晶體管的β參數偏移的影響,因此可以用這個分壓偏置電路來實現恆流源。其電路計算方法與分壓偏置也是類似的: 基極 ...
  • 環境:centos7 rpm 包倉庫:https://pkgs.org/ 上面能查找到所有的rpm包,及依賴關係 一、rpm包和源碼包 windows上軟體安裝是靠下載安裝程式執行實現的。linux上安裝軟體要下載相應的包(源碼包,rpm包),不同的包安裝方式不同 (1) rpm 包 1. 包的命名 ...
  • 常常會用到 zip 命令,但是時間一長,就忘記了具體參數,下麵簡要記錄,進行備忘: 常用命令: zip -q -r nvprof_test_out.zip nvprof_test_out/ # 壓縮 參數解析: 功能說明:壓縮文件。 語 法:zip [-AcdDfFghjJKlLmoqrSTuvVw ...
  • 安裝Ubuntu的時候,如果想自定義分區,那麼勾選Something else即可。 (圖1) 分區種類 1.新建分區表 2./boot 300M 3. /swap 2G 4. / 20G 5./home 剩餘全部 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...