UDP多對多組播通信

廣播和多播僅應用于UDP。TCP是一個面向連接的協議,TCP一定是點對點的,一點是兩個主機來建立連接的,TCP肯定是單播。只有UDP才會使用廣播和組播。

如下示例實現一個UDP多對多的組播通信,進程中有收、發兩個線程,分別表示往組播發送、接收數據。

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h>// 組播地址必須是D類地址,224.0.0.0~239.255.255.255
#define GROUP_IP "239.0.0.1"
#define GROUP_PORT 8888
#define MAX_MESSAGE 128void *sender(void *arg) {int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) {printf("Sender alloc socket failed! %s", strerror(errno));pthread_exit(NULL);}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr(GROUP_IP);addr.sin_port = htons(GROUP_PORT);while(1) {char message[MAX_MESSAGE];printf("Enter message to send: ");fgets(message, MAX_MESSAGE, stdin);sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&addr, sizeof(addr));}close(sockfd);pthread_exit(NULL);
}void *receiver(void *arg) {int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) {printf("Receiver alloc socket failed! %s", strerror(errno));pthread_exit(NULL);}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr(GROUP_IP);addr.sin_port = htons(GROUP_PORT);struct ip_mreq mreq;mreq.imr_multiaddr.s_addr = inet_addr(GROUP_IP);mreq.imr_interface.s_addr = htonl(INADDR_ANY);/* 加入組播 */int ret = setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));if (ret < 0) {printf("IP_ADD_MEMBERSHIP failed! %s", strerror(errno));pthread_exit(NULL);}/* 設置端口復用,多個進程監聽同一端口 */ret =  setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &mreq, sizeof(mreq));if (ret < 0) {printf("SO_REUSEADDR failed! %s", strerror(errno));pthread_exit(NULL);}ret = bind(sockfd, (struct sockaddr *)&addr, sizeof(addr));if (ret < 0) {printf("Bind failed! %s", strerror(errno));pthread_exit(NULL);}char message[MAX_MESSAGE];struct sockaddr_in sender_addr;socklen_t sender_len = sizeof(sender_addr);while(1) {recvfrom(sockfd, message, MAX_MESSAGE, 0, (struct sockaddr *)&sender_addr, &sender_len);printf("Received message from %s:%d - %s\n", inet_ntoa(sender_addr.sin_addr), ntohs(sender_addr.sin_port), message);}close(sockfd);pthread_exit(NULL);
}int main() {pthread_t threadA, threadB;pthread_create(&threadA, NULL, sender, NULL);pthread_create(&threadB, NULL, receiver, NULL);pthread_join(threadA, NULL);pthread_join(threadB, NULL);return 0;
}

運行結果如下:

在這里插入圖片描述

使用任意節點發送消息,其它的節點都能收到。

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

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

相關文章

6款電腦精選工具軟件推薦!

AI視頻生成&#xff1a;小說文案智能分鏡智能識別角色和場景批量Ai繪圖自動配音添加音樂一鍵合成視頻https://aitools.jurilu.com/ 1.IP地址查看工具——純真ip數據庫 純真IP數據庫是一個易于操作的IP地址查詢工具&#xff0c;它允許用戶通過輸入IP地址來查詢其對應的地理位置…

Django創建網站的地基

相關文檔 1、為新網站創建一個文件夾&#xff08;這里是&#xff1a;locallibrary&#xff09; D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\dj…

【Uniapp】簡易封裝提示框showToast/showModal

組件 // 封裝提示框 export const showModal (content, showCancel false, title "提示") > {return new Promise((resolve, reject) > {uni.showModal({title: title,content: content,showCancel: showCancel,success: (res) > {resolve(res);},fail:…

Linux計劃任務功能介紹

一次性計劃任務(不能跨越0點) at 16:20 at> echo hello | wall at> at 1621 at> mkdir /tmp/date %F at> at 16:2212022015 at> rm -fr /tmp/* at> job 33 at 2015-12-02 16:22 atq 查詢計劃任務 atrm 刪除計劃任務 atrm 33 /etc/at.deny 拒絕使用at …

結合多模態 AI 谷歌展示 AR 眼鏡原型機;Meta 被曝開發帶攝像頭的 AI 耳機丨 RTE 開發者日報 Vol.204

開發者朋友們大家好&#xff1a; 這里是 「RTE 開發者日報」&#xff0c;每天和大家一起看新聞、聊八卦。我們的社區編輯團隊會整理分享 RTE&#xff08;Real Time Engagement&#xff09; 領域內「有話題的新聞」、「有態度的觀點」、「有意思的數據」、「有思考的文章」、「…

如何修改android 項目顯示的app名

修改vlaues下的string.xml文件 修改這個標簽中的內容就行

國產銀河麒麟V10SP1系統安裝Qt和MySql步驟

安裝軟件&#xff1a;準備好Kylin-Desktop-V10-SP1-Release-hwe-2107-x86_64.iso和qt-opensource-linux-x64-5.14.2.run 安裝步驟&#xff1a; 1、VMWare軟件中新建一個虛擬機并安裝Kylin-Desktop-V10-SP1-Release操作系統&#xff0c;安裝時候輸入密碼的地方記得要用英文&am…

“網絡安全新紀元:等保2.0的詳細解讀與實踐”

網絡安全等級保護基本要求》&#xff08;等保2.0&#xff09;于2019年6月發布&#xff0c;是我國網絡安全等級保護制度的一項重要標準。等保2.0主要針對關鍵信息基礎設施的網絡安全保護&#xff0c;對數據安全和個人信息保護提出了更高的要求。本文將對等保2.0進行詳細解讀&…

3.深度學習課程--技術棧

上一節我們概覽了深度學習的主要內容及其應用領域&#xff0c;解決了學習的初衷和用途問題。在深入算法和模型之前&#xff0c;本小節將介紹課程所需的技術棧和準備事項。雖然這些準備看似簡單&#xff0c;但它們對于后續學習至關重要。 首先&#xff0c;我們將使用Python作為…

動態路由實驗新手入門:快速掌握核心知識點

大家好&#xff0c;這里是G-LAB IT實驗室。今天帶大家學習一下華為動態路由實驗配置&#xff0c;新手入門&#xff0c;快速掌握核心知識點&#xff01; 01、實驗拓撲 02、實驗需求 1.根據拓撲運行對應的路由協議 2.每個路由器都有自己的環回口&#xff0c;宣告的區域不限制 …

Java各大GPS坐標系互轉算法(保證好用)

不好用來捶我&#xff0c;好用的話點個贊鼓勵一下~ /*** 坐標轉換器*/ public class CoordinateConverter {private static final double x_PI 3.14159265358979324 * 3000.0 / 180.0;private static final double PI 3.1415926535897932384626;private static final double…

IDEA不能創建新項目和新模塊

問題&#xff1a; IDEA不管是創建新項目還是新模塊都創建不成功&#xff0c;會報如下圖錯誤 解決方案&#xff1a; 在電腦設置里搜索 “防火墻和網絡保護” &#xff0c;打開如下圖所示 找到你所安裝的IDEA&#xff0c;更改設置&#xff0c;選中IDEA 最后&#xff0c;確定&am…

香港優才計劃避坑指南及過來人建議,這6種行為會毀了你的香港身份!

香港優才計劃是一項香港人才引進政策&#xff0c;如果你想真正落戶香港&#xff0c;那么就需要了解清楚香港優才從申請到永居的整個流程&#xff0c;并且要注意維護好香港身份。 如果操作不當&#xff0c;可能會中斷你來之不易的香港身份。 本文總結了香港優才整個流程中&…

nmap端口掃描工具——Win10

Nmap安裝流程&#xff1a; Nmap官網鏈接&#xff1a;Download the Free Nmap Security Scanner for Linux/Mac/Windows Nmap參考文檔鏈接&#xff1a;https://nmap.org/book/toc.html Nmap使用流程&#xff1a; Nmap軟件主頁面&#xff1a; 中文版&#xff1a; nmap -T4 -…

脈沖神經網絡(Spiking Neural Networks,SNNs)介紹

脈沖神經網絡&#xff08;Spiking Neural Networks&#xff0c;SNNs&#xff09;是仿生神經網絡的一種類型&#xff0c;它們模仿了生物神經元在大腦中傳遞信息的方式。與傳統的人工神經網絡&#xff08;Artificial Neural Networks&#xff0c;ANNs&#xff09;不同&#xff0c…

Prosys OPC UA Simulation Server工程文件備份方法

Prosys OPC UA Simulation Server是一款免費的OPC UA服務器仿真軟件&#xff0c;具體的使用和下載參考官網&#xff1a; Prosys OPC - OPC UA Simulation Server Downloads 他的免費版本不提供工程文件的備份、導入導出功能&#xff0c;每次退出時保存。如果需要工程備份&a…

IPsec VPN簡介

什么是IPsec&#xff1f; IPsec&#xff08;Internet Protocol Security&#xff09;是為IP網絡提供安全性的協議和服務的集合&#xff0c;它是VPN&#xff08;Virtual Private Network&#xff0c;虛擬專用網&#xff09;中常用的一種技術。其實就是一種協議簇&#xff08;類…

揭秘SmartEDA魅力:為何眾多學校青睞這款電路仿真軟件?

在當今數字化、信息化的教育時代&#xff0c;電子電路仿真軟件已成為電子學教學不可或缺的重要工具。其中&#xff0c;SmartEDA電路仿真軟件以其強大的功能、用戶友好的界面以及豐富的教育資源&#xff0c;贏得了眾多學校的青睞。那么&#xff0c;究竟是什么原因讓SmartEDA成為…

如何在阿里云申請免費SSL證書(三個月有效)

SSL證書主要用于建立Web服務器和客戶端間可信的HTTPS協議加密鏈接&#xff0c;以防止數據在傳輸過程中被篡改&#xff0c;避免信息泄露。阿里云提供了多種品牌和類型的SSL證書&#xff0c;以滿足不同用戶的需求。您可以根據自己的預算、域名類型以及網站類型&#xff0c;選擇購…

軟件工程期末復習(7)需求過程

需求分析 需求過程 什么是需求過程&#xff1f; 需求過程是用來導出、確認和維護系統需求文檔的一組結構化活動。通常&#xff0c;一個良好的需求過程應包括下列活動&#xff1a; 需求提取需求分析和協商需求確認 需求提取 需求提取是通過與客戶、系統用戶和其他與系統開發相…