Linux udp編程

在這里插入圖片描述

  • 我最近開了幾個專欄,誠信互三!
    ====> |||《算法專欄》::刷題教程來自網站《代碼隨想錄》。|||
    ====> |||《C++專欄》::記錄我學習C++的經歷,看完你一定會有收獲。|||
    ====> |||《Linux專欄》::記錄我學習Linux的經歷,看完你一定會有收獲。|||
    ====> |||《C#專欄》::記錄我復習C#的經歷,深度理解查漏補缺,不定期更新。|||
    ====> |||《計算機網絡專欄》::記錄我學習計算機網絡,看完你一定會有收獲。|||

Linux udp編程

  • udp通信原理
  • udp通信接口
    • socket創建
    • 網絡通信結構體
    • bind port和ip
    • 接收信息接口
    • 發送信息接口
  • 其他網絡接口

udp通信原理

udp是用戶數據報協議不面向鏈接的不可靠傳輸。
udp協議使用socket進行通信,socket包含兩個部分:(ip-port),可以表示網絡中的某個主機和某個進程。

udp通信服務端建立如下
1).創建socket。
2).將socket和本地ip和port,bind。
3).使用recvfrom,sendto接口,接收,發送信息。
udp客戶端建立如下
1).創建socket。
2).本地隱式將sokcet和本地ip和port綁定。
3).使用recvfrom,sendto接口,接收,發送信息。

udp通信接口

支持udp通信接口較多。

socket創建

socket接口如下


參數1:domain,決定通信域,其接收一些宏,如AF_INET(ipv4),AF_INET(ipv6),同時也可以基于udp進行域間通信,還可以進行網絡管理,還可以跨網絡通信。
參數2:type,決定套接字通信類型,依舊接收一個宏,如SOCK_DGRAM,及代表數據報通信。
參數3:protocol,當前兩個參數決定后,該參數傳遞0。
retval:返回一個socket值,socket在底層是一個文件描述符,上層的進程就是通過該描述符通信的,類似于打開網卡。

當domain = AF_INET,type = SOCK_DGRAM代表udp通信。

網絡通信結構體

struct sockaddr,struct sockaddr_in,struct sockaddr_un。
在這里插入圖片描述
sockaddr是父類接口,其他接口是子類接口,在使用的時候,我們都使用sockaddr_in/sockaddr_un,但是在使用參數的時候,為了保證可以通用一個接口,在接口參數設計的時候,都使用的是sockaddr。
1).sockaddr_in:用于網絡間通信,其結構體如下。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在該結構體中,存在sin_port,sin_addr(結構體),sin_family(指定通信域)。

bind port和ip

bind接口如下

在這里插入圖片描述
參數1:sockfd,傳入一個sock文件描述符,代表綁定某個socket。
參數2:addr,傳入當地的,要綁定的ip和端口號,在服務端,sockaddr_in中,我們一般不綁定一個確定的ip,而通過宏INADDR_ANY,來代表當前主機。
參數3:addrlen,將參數2的大小算出,傳入其中。
retval:小于零,代表bind函數錯誤。

接收信息接口

recvfrom接口如下

在這里插入圖片描述
參數1:sockfd,從那個sockfd中接收信息。
參數2:buf,將接收到的信息放入buf中。
參數3:len,代表buf中的有效個數。
參數4:flag,一般傳入0.
參數5:src_addr,為了能夠在接收信息后,知道信息的發送方,傳入一個輸出參數。
參數6:addrlen,該參數的類型是一個自定義類型,其實代表無符號整型,該參數就是傳入該類型的指針。
retval:返回收到的內容的字節數。

發送信息接口

sendto接口如下

在這里插入圖片描述
參數1:sockfd,從那個sockfd中接收信息。
參數2:buf,將發送的信息放入buf中,發送出去。
參數3:len,代表buf中的有效個數。
參數4:flag,一般傳入0.
參數5:dest_addr,發送信息的目的sockaddr。
參數6:addrlen,其實代表無符號整型,直接傳入一個值。

其他網絡接口

在udp通信中還存在許多網絡接口,如網絡字節序轉換接口,ip字符串到4字節相互轉換接口,清空內存空間接口等等。
1).網絡字節序轉換接口
各個主機的字節序不同,有的主機是大端字節序,有的主機是小端字節序,為了確定內容在網絡中的傳遞,在網絡中傳遞的數據都是通過大端字節序傳遞的,所以在主機中,我們要通過網絡通信,就要將傳遞的結構體內容轉為大端。
在這里插入圖片描述
2).ip字符串到4字節相互轉換接口
在客戶端,我們需要傳遞信息,就必須知道目的ip和port,需要將字符串ip轉換為32位數字ip,
存在以下接口
在這里插入圖片描述
inet_aton接口,將點分十進制字符ip轉換為in_addr的4字節ip,返回值0,失敗,非0,成功。
在這里插入圖片描述
接口inet_ntoa,將4字節ip轉換為字符串ip,該接口返回字符串的地址,該接口存在線程安全問題,該接口內部會在同一個靜態區創建一個字符串,并且返回它的地址,所以多線程并發訪問時,會造成線程安全問題。
3).清空內存空間接口
在使用struct sockaddr_in/struct sockaddr_un接口時,需要清空內存空間,就可以使用bzero接口。

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

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

相關文章

Go中gin框架的*gin.Context參數常見實用方法

梗概: *gin.Context是處理HTTP請求的核心。ctx代表"context"(上下文),它包含了處理請求所需的所有信息和方法,例如請求數據、響應構建器、路由參數等。 基本的格式: func SomeHandler(ctx *gi…

空間計量模型及 Stata 具體操作步驟

目錄 一、引言 二、空間計量模型理論原理 空間自回歸模型(SAR): 空間誤差模型(SEM):, 空間杜賓模型(SDM): 三、實證模型構建 四、數據準備 五、Stata …

14-56 劍和詩人30 - IaC、PaC 和 OaC 在云成功中的作用

介紹 隨著各大企業在 2024 年加速采用云計算,基礎設施即代碼 (IaC)、策略即代碼 (PaC) 和優化即代碼 (OaC) 已成為成功實現云遷移、IT 現代化和業務轉型的關鍵功能。 讓我在云計劃的背景下全面了解這些代碼功能的當前狀態。我們將研究現代云基礎設施趨勢、IaC、Pa…

【電路筆記】-C類放大器

C類放大器 文章目錄 C類放大器1、概述2、C類放大介紹3、C類放大器的功能4、C 類放大器的效率5、C類放大器的應用:倍頻器6、總結1、概述 盡管存在差異,但我們在之前有關 A 類、B 類和 AB 類放大器的文章中已經看到,這三類放大器是線性或部分線性的,因為它們在放大過程中再現…

Collection 和 Collections 的區別與用法

Collection 和 Collections 的區別與用法 1、Collection 接口1.1 主要特點1.2 常見方法 2、 Collections 工具類2.1 主要特點2.2 常見方法 3、示例代碼3.1 使用 Collection 接口3.2 使用 Collections 工具類 4、總結 💖The Begin💖點點關注,收…

STM32學習歷程(day6)

EXTI外部中斷使用教程 首先先看下EXTI的框圖 看這個框圖就能知道要先初始化GPIO外設 那么和前面一樣 1、先RCC使能時鐘 2、配置GPIO 選擇端口為輸入模式, 3、配置AFIO,選擇我們用的GPIO連接到后面的EXTI 4、配置EXTI,選擇邊沿觸發方式…

LVS實驗

LVS實驗 nginx1 RS1 192.168.11.137 nginx2 RS2 192.168.11.138 test4 調度器 ens33 192.168.11.135 ens36 12.0.0.1 test2 客戶端 12.0.0.10 一、test4 配置兩張網卡地址信息 [roottest4 network-scripts]# cat ifcfg-ens33 TYPEEthernet BOOTPROTOstatic DEFROUTEyes DEVIC…

詳解平面DP(上)

前言 其實平面DP和正常的dp沒有什么本質上的區別,只不過是在二維的面上進行DP,而且,客觀的說,其實和遞推沒有什么區別,不要把他想的太難了 講解 本蒻雞思前想后,好像關于平面DP的理論知識好像沒有什么&a…

前后端分離系統

前后端分離是一種現代軟件架構模式,特別適用于Web應用開發,它強調將用戶界面(前端)與服務器端應用邏輯(后端)相分離。兩者通過API接口進行數據交互。這種架構模式的主要優勢在于提高開發效率、維護性和可擴…

Git命令常規操作

目錄 常用操作示意圖 文件的狀態變化周期 1. 創建文件 2. 修改原有文件 3. 刪除原有文件 沒有添加到暫存區的數據直接 rm 刪除即可: 對于添加到暫存區的數據 文件或目錄: 4. 重命名暫存區數據 5. 查看歷史記錄 6. 還原歷史數據 恢復過程的原…

最新深度技術Win7精簡版系統:免費下載!

在Win7電腦操作中,用戶想要給電腦安裝上深度技術Win7精簡版系統,但不知道去哪里才能找到該系統版本?接下來系統之家小編給大家帶來了深度技術Win7系統精簡版本的下載地址,方便大家點擊下載安裝。系統安裝步驟已簡化,新…

定位和分析解決std::thread創建失敗的問題和解決方法(mmap虛擬地址耗盡)

文章目錄 引言問題描述和分析監控shell腳本shell腳本解釋 問題根源追溯解決方案一:增大mmap區域解決方案二:優化線程棧空間解決方案三:引入線程池參考文章 引言 在高并發和長周期運行的環境中,頻繁創建std::thread線程可能導致mm…

設計模式8-橋模式

設計模式8-Bridge 橋模式 由來與目的模式定義結構代碼推導1. 類和接口的定義2. 平臺實現3. 業務抽象4. 使用示例總結1. 類數量過多,復雜度高2. 代碼重復3. 不符合單一職責原則4. 缺乏擴展性改進后的設計1. 抽象和實現分離(橋接模式)2. 抽象類…

學習XDMA—20240709

概覽: 在內部,子系統可以配置為實現多達8個獨立的物理DMA引擎(最多4個H2C和4個C2H)。這些DMA引擎可以映射到單獨的AXI4Stream接口,也可以將共享的AXI4內存映射(MM)接口映射到用戶應用程序。在axis4 MM接口上,PCI Express的DMA/橋接…

智能警衛:Conda包依賴的自動監控之道

智能警衛:Conda包依賴的自動監控之道 引言 在復雜的軟件開發項目中,依賴管理是確保項目健康運行的關鍵環節。Conda作為Python和其他科學計算語言的強大包管理器,提供了依賴監控功能,幫助用戶自動化和簡化依賴項的監控過程。本文…

軟考高級第四版備考--第15天(建設團隊)Develop Team

定義:提高工作能力,促進團隊成員互動,改善團隊整體氛圍以提高項目績效的過程 作用:改進團隊協作、增強人際關系技能、激勵員工、減少摩擦以提升整體項目績效 說明:高效團隊行為: 使用開放與有效的溝通&a…

簡述 JS 中對象的創建和拷貝

在 JavaScript 中,對象是一種非常重要且靈活的數據結構,用于存儲多個值(屬性)和方法(函數) 對象的創建和拷貝是日常開發中經常涉及的操作,對于業務邏輯的準確實現有著重要的作用 本文將簡要概…

linux查看目錄下的文件夾命令,find 查找某個目錄,但是不包括這個目錄本身?

linux查看目錄下的文件夾命令,find 查找某個目錄,但是不包括這個目錄本身? Linux中查看目錄下的文件夾的命令是使用ls命令。ls命令用于列出指定目錄中的文件和文件夾。通過不同的選項可以實現顯示詳細信息、按照不同的排序方式以及使用不同的…

Profibus轉ModbusTCP網關模塊實現Profibus_DP向ModbusTCP轉換

Profibus和ModbusTCP是工業控制自動化常用的二種通信協議。Profibus是一種串口通信協議,它提供了迅速靠譜的數據傳輸和各種拓撲結構,如總線和星型構造。Profibus可以和感應器、執行器、PLC等各類設備進行通信。 ModbusTCP是一種基于TCP/IP協議的通信協議…

一次零基礎 自“信息收集“到“權限維持“的滲透測試全程詳細記錄

一、滲透總流程 1.確定目標: 在本靶場中,確定目標就是使用各種掃描工具進行ip掃描,確定目標ip。 2.信息收集: 比如平常挖洞使用fofa,天眼查,ip域名等進行查,在我們這個靶場中比如使用Wappalyz…