【Linux】網絡編程

目錄

端口號

網絡字節序

socket編程

接口

sockaddr結構

udp網絡程序

創建套接字

綁定

接收

發送

客戶端需要綁定嗎?

客戶端執行方法

本地環回地址

終端文件

代碼

tcp網絡程序

SOCK_STREAM

監聽

查詢網絡信息

獲取新連接

地址轉換函數

客戶端綁定

多進程版本

關閉多余文件描述符

如何解決父進程等待子進程會阻塞的問題?

多線程版本

線程池版本

守護進程

進程與任務的關系


端口號

網絡通信不僅包括建立連接,還有應用層的通信。

端口號負責判斷發給上層哪一個應用。

發送方和接收方在報頭中有對應的源端口號和目的端口號。

這種基于ip+端口的通信方式叫socket。

端口號與進程id

綁定的過程就是把進程pcb和哈希表中端口對應位置關聯起來。


網絡字節序

轉換接口


socket編程

接口


sockaddr結構

套接字有三種

設計者不想寫三套接口,就需要把類型統一,所以都傳入sockaddr結構體,判斷地址類型從而決定套接字的種類。


udp網絡程序

創建套接字

第一個參數是域的類型

第二個參數是套接字類型

第三個參數是協議類型

返回值是文件描述符


綁定

第二個參數是自己構造一個結構體傳進去

family表示域類型,port是端口號,addr是ip

本主機的端口號要發送出去會經過網絡,所以要轉網絡字節序。

ip要發出去也要轉網絡字節序。

整數ip和字符串ip快速轉換

整數轉字符串:構造四個八位整型的結構體,將整數強轉該結構體類型,分別訪問結構體并轉字符串。

字符串轉整型:將整數強轉四個八位結構體類型,分別訪問并賦值。

第三個參數是結構體大小。

?綁定不推薦直接綁定具體ip一般寫0.0.0.0,因為有一些主機有多個網卡,綁定一個其他網卡就接收不了了。

INADDR_ANY表示接收任意地址

綁定端口盡量大一點,1023以下是內置端口。


接收

從套接字中讀一個報文

結構體是輸出型參數,負責獲得對方的信息。

buffer是對方發送的內容,結構體是對方的信息


發送

結構體是發送目標的信息


客戶端需要綁定嗎?


客戶端執行方法

把代碼進行分層,處理方法分開。

popen把字符串當成命令,創建子進程,父子進程建立管道,子進程執行命令,結果返回給父進程。


本地環回地址

往下貫穿協議棧,然后又往上返回,不進入網絡


終端文件

把輸入到2號文件的內容重定向到2號終端。

xshell可以開很多個終端,查詢終端。


代碼

?socket_lesson/my_udp · lyh/linux - 碼云 - 開源中國


tcp網絡程序

SOCK_STREAM

選擇SOCK_STREAM面向字節流。

監聽

查詢網絡信息

l表示listen,p表示對應進程,t表示tcp。

獲取新連接

返回值也是文件描述符

accept返回的文件描述符負責真正的IO服務,參數的文件描述符負責建立連接,一般叫作監聽套接字。

連接獲取失敗就繼續重新獲取。

地址轉換函數

客戶端綁定

多進程版本

關閉多余文件描述符

多進程版,子進程會繼承文件描述符信息,讓子進程負責IO就可以把監聽套接字關了,父進程不關注IO也可以把不需要的文件描述符關了。

如何解決父進程等待子進程會阻塞的問題?

利用孫子進程解決,把事情給孫子進程做,子進程直接退出,父進程也等待完畢。

第二種方法:用信號忽略

多線程版本

detach線程分離從而不用等待子線程?

當靜態函數想訪問類內成員時,可以把線程的參數結構加一個該類的指針。

線程池版本

假如服務端正在寫,客戶端關閉了文件,讀端關閉了,寫端也會被迫關閉。

這樣可以防止寫端被關閉。防止服務端被關閉就對這個信號忽略。

客戶端重連

服務器掛掉無法立即重新啟動,解決方法:

守護進程

每一個用戶登陸都會產生一個會話,會話里面會生成bash進程提供命令行服務,一個會話可以有一個前臺進程多個后臺進程,鍵盤和信號只能影響前臺進程。

&變成后臺任務,jobs查看后臺任務,fg把后臺變成前臺

fg變成前臺后如何變回后臺:先用信號暫停,然后用bg。信號暫停后任務會以停止狀態回到后臺,bash自動回前臺。

進程與任務的關系

任務是一個具體事情,它可以被一個進程完成,也可以被一個進程組完成。

守護進程可以不受用戶退出,注銷(關閉會話)的影響。

做法:把目標進程(組)遷移到一個新的會話。

調用接口的進程不能是該進程組的組長。解決方法:讓子進程調用。

第二種方法:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76412.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go 語言中的select是做什么的

Go 語言中的 select 是做什么的 在 Go 語言中,select 語句是用于處理多個通道(channel)操作的一種控制結構。它類似于 switch 語句,但專門用于并發編程,允許 Goroutine 在多個通道上等待操作(發送或接收&a…

智慧班牌系統解決方案,SaaS智慧電子班牌云平臺

智慧班牌系統解決方案 系統概述 智慧班牌是智慧校園建設不斷發展的產物,是教育信息化改革的載體。通過智慧班牌可以高效便捷傳遞各種知識信息和通知信息、及時反饋課堂信息、實現班級的透明化管理。智慧班牌將學生平安考勤、異常出勤情況及時反饋至家長、老師&…

利用大模型和聚類算法找出 Excel 文件中重復或相似度高的數據,并使用 FastAPI 進行封裝的詳細方案

以下是一個利用大模型和聚類算法找出 Excel 文件中重復或相似度高的數據,并使用 FastAPI 進行封裝的詳細方案: 方案流程 數據讀取:從 Excel 文件中讀取數據。文本向量化:使用大模型將文本數據轉換為向量表示。聚類分析:運用聚類算法對向量進行分組,將相似度高的數據歸為…

【Docker基礎】容器技術詳解:生命周期、命令與實戰案例

文章目錄 一、什么是容器?二、為什么需要容器三、容器的生命周期容器狀態容器OOM容器異常退出容器異常退出容器暫停 四、容器命令命令清單詳細介紹 五、容器操作案例容器的狀態遷移容器批量操作容器交互模式attached 模式detached 模式interactive 模式 容器 與 宿主…

Laravel 實現 隊列 發送郵件功能

一. 什么是隊列 在構建 Web 應用程序時,你可能需要執行一些任務,例如解析文件,發送郵件,大量的數據計算等等,這些任務在典型的 Web 請求期間需要很長時間才能執行。 慶幸的是,Laravel 可以創建在后臺運行…

flink Shuffle的總結

關于 ** ?5 種 Shuffle 類型** 的區別、使用場景及 Flink 版本支持的總結: * 注意:下面是問AI具體細節與整理學習 1. 核心區別 Shuffle 類型核心特點使用場景Flink 版本支持Pipelined Shuffle流式調度,純內存交換,低延遲(毫秒級…

Git使用與管理

一.基本操作 1.創建本地倉庫 在對應文件目錄下進行: git init 輸入完上面的代碼,所在文件目錄下就會多一個名為 .git 的隱藏文件,該文件是Git用來跟蹤和管理倉庫的。 我們可以使用 tree 命令(注意要先下載tree插件&#xff09…

計算機視覺——深度學習圖像處理中目標檢測平均精度均值(mAP)與其他常用評估指標

概述 平均精度均值(mAP)是目標檢測領域中最為流行且復雜的重要評估指標之一。它廣泛用于綜合總結目標檢測器的性能。許多目標檢測模型會輸出類似以下的參數結果: Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.3…

C語言中單鏈表操作:查找節點與刪除節點

一. 簡介 前面學習了C語言中創建鏈表節點,向鏈表中插入節點等操作,文章如下: C語言中單向鏈表:創建節點與插入新節點-CSDN博客 本文繼續學習c語言中對鏈表的其他操作,例如在鏈表中查找某個節點,刪除鏈表…

WePY 框架:小程序開發的“Vue式”利器!!!

WePY 框架:小程序開發的“Vue式”利器 🚀 哈嘍,大家好!👋 今天我們要聊聊一個在微信小程序開發中大放異彩的框架——WePY!它是什么?有什么特點?為啥值得一試?別急&#…

什么是微前端?有什么好處?有哪一些方案?

微前端(Micro Frontends) 微前端是一種架構理念,借鑒了微服務的思想,將一個大型的前端應用拆分為多個獨立、自治的子應用,每個子應用可以由不同團隊、使用不同技術棧獨立開發和部署,最終聚合為一個整體產品…

【家政平臺開發(33)】庫存管理模塊開發實戰:從基礎搭建到智能管控

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

Mysql個人筆記

Mysql個人筆記 sql基礎書寫規則和種類種類書寫規則注釋規則啟動 DDL數據類型數據庫的操作useshowcreatedrop 表的操作useshowcreate創建表復制表 dropalter Mysql的存儲引擎 DMLselectselect語句like(謂詞)where聚合函數:關于nullgroup byexi…

【重裝系統】大白菜自制U盤裝機,備份C盤數據,解決電腦啟動黑屏/藍屏

1. 準備 U 盤 U 盤容量至少 8G,備份 U 盤的數據(后期會格式化) 2. 從微軟官網下載操作系統鏡像 https://www.microsoft.com/zh-cn/software-download/windows11 3. 下載安裝大白菜 https://www.alipan.com/s/33RVnKayUfY 4. 插入 U 盤&#…

各類神經網絡學習:(十)注意力機制(第2/4集),pytorch 中的多維注意力機制、自注意力機制、掩碼自注意力機制、多頭注意力機制

上一篇下一篇注意力機制(第1/4集)待編寫 一、pytorch 中的多維注意力機制: 在 N L P NLP NLP 領域內,上述三個參數都是 向量 , 在 p y t o r c h pytorch pytorch 中參數向量會組成 矩陣 ,方便代碼編寫。…

uni-app初學

文章目錄 1. pages.json 頁面路由2. 圖標3. 全局 CSS4. 首頁4.1 整體框架4.2 完整代碼4.3 輪播圖 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分類 uni-row、uni-col4.6 商品列表 小程序開發網址: 注冊小程序賬號 微信開發者工具下載 uniapp 官網 HbuilderX 下…

VBA將Word文檔內容逐行寫入Excel

如果你需要將Word文檔的內容導入Excel工作表來進行數據加工,使用下面的代碼可以實現: Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…

MySQL運行一段時間后磁盤出現100%讀寫

MySQL運行一段時間后磁盤出現100%讀寫的情況,可能是由多種原因導致的,以下是一些常見原因及解決方法: 可能的原因 1. 磁盤I/O壓力過大[^0^]:數據量過大,數據庫查詢和寫入操作消耗大量I/O資源。索引效率低&#xff0c…

【RabbitMQ】延遲隊列

1.概述 延遲隊列其實就是隊列里的消息是希望在指定時間到了以后或之前取出和處理,簡單來說,延時隊列就是用來存放需要在指定時間被處理的元素的隊列。 延時隊列的使用場景: 1.訂單在十分鐘之內未支付則自動取消 2.新創建的店鋪,…

Linux筆記之Ubuntu系統設置自動登錄tty1界面

Ubuntu22.04系統 編輯getty配置文件 vim /etc/systemd/system/gettytty1.service.d/override.conf如果該目錄或者文件不存在,進行創建。 在override.conf文件中進行編輯: [Service] ExecStart ExecStart-/sbin/agetty --autologin yourusername --no…