udp c语言实现组播的例子
一、组播与广播的区别
1、组播地址和广播地址是不同的概念
-
组播地址:用于将数据包发送到一组特定的接收者,只有加入该组播地址的设备才能接收数据。它提高了网络效率,因为发送者只需发送一份数据。
-
广播地址:用于将数据包发送到同一网络中的所有设备。所有接收设备都会接收广播消息,因此广播的范围更广,但会增加网络负担。
简单来说,组播是“对特定组发送”,而广播是“对所有发送”
2、常用的广播地址
-
局域网广播地址:通常是子网的最高地址。例如,对于子网
192.168.1.0/24,广播地址是192.168.1.255。 -
全局广播地址:在IPv4中,
255.255.255.255是一个特殊的广播地址,表示发送给同一网络中的所有设备。 -
特定服务的广播地址:某些协议使用特定的广播地址,例如:
- DHCP:使用
255.255.255.255进行请求。 - ARP:在局域网中,用于地址解析。
- DHCP:使用
3、常用的组播地址
组播地址有很多,通常分为几个范围。以下是一些常见的组播地址及其用途:
-
224.0.0.0 到 224.0.0.255:这个范围被称为“本地网络组播地址”,主要用于局域网内部的通信。它们通常被网络协议和服务使用,比如:
224.0.0.1:所有组播成员224.0.0.2:所有路由器
-
224.0.1.0 到 238.255.255.255:这些地址通常用于特定的应用程序和服务。开发者可以在这个范围内选择组播地址,但需要确保不会与已知服务冲突。
-
239.0.0.0 到 239.255.255.255:这个范围通常被称为“临时组播地址”,可以被用户和开发者自由使用。具体的地址可以根据应用需求来选择。
-
FF00::/8:这是IPv6的组播地址范围,类似于IPv4中的D类地址。IPv6的组播地址有多种用途,包括用于特定服务和协议的发现。
二、组播服务器接收代码 recevier.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 12345
#define GROUP "239.255.255.250"int main() {int sockfd;struct sockaddr_in local_addr;struct ip_mreq group;char buffer[1024];int nbytes;sockfd = socket(AF_INET, SOCK_DGRAM, 0);memset(&local_addr, 0, sizeof(local_addr));local_addr.sin_family = AF_INET;local_addr.sin_addr.s_addr = INADDR_ANY;local_addr.sin_port = htons(PORT);bind(sockfd, (struct sockaddr*)&local_addr, sizeof(local_addr));group.imr_multiaddr.s_addr = inet_addr(GROUP);group.imr_interface.s_addr = htonl(INADDR_ANY);setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group));printf("Waiting for broadcast messages... %s\n", GROUP);while (1) {nbytes = recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL);if (nbytes < 0) {perror("recvfrom");exit(1);}buffer[nbytes] = '\0';printf("Received: %s\n", buffer);}close(sockfd);return 0;
}
三、组播发送方代码 sender.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 12345
#define GROUP "239.255.255.250"int main() {int sockfd;struct sockaddr_in group_addr;char *messageText = "I am server. Hello, Multicast!";sockfd = socket(AF_INET, SOCK_DGRAM, 0);memset(&group_addr, 0, sizeof(group_addr));group_addr.sin_family = AF_INET;group_addr.sin_addr.s_addr = inet_addr(GROUP);group_addr.sin_port = htons(PORT);int nCount = 0;while (1) {char message[256] = {0};sprintf(message, "%s %s %d", __TIME__, messageText, nCount++);sendto(sockfd, message, strlen(message), 0, (struct sockaddr*)&group_addr, sizeof(group_addr));printf("Message sent: %s\n", message);sleep(1);}close(sockfd);return 0;
}
四、编译、运行
gcc sender.c -o sendergcc receiver.c -o receiver./receiver
相关文章:
udp c语言实现组播的例子
一、组播与广播的区别 1、组播地址和广播地址是不同的概念 组播地址:用于将数据包发送到一组特定的接收者,只有加入该组播地址的设备才能接收数据。它提高了网络效率,因为发送者只需发送一份数据。 广播地址:用于将数据包发送到…...
ffmpeg面向对象——AVInputFormat与URLProtocol啥关系
《ffmpeg面向对象-rtsp拉流相关对象》和《ffmpeg面向对象——拉流协议匹配机制探索》探索过了输入格式匹配和底层协议匹配,且ffmpeg拉流是先是匹配输入格式——抽象为AVInputFormat类,然后再匹配url协议类——抽象为URLProtocol类。 它们是啥关系&#…...
【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解
高阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!二叉搜索树 大家好,这里是店小二!今天我们将深入探讨高阶数据结构中的AVL树。AVL树是一种自平衡的二叉搜索树,可以看作是对传统二叉搜索树的优化版本。如果你对数据结…...
中级软考软件设计师真题+模拟题+课件讲解+机考讲解模拟+笔记分享
软考真题分享 下载链接⬇️⬇️: 下载链接...
MySQL—视图
前言: 视图是一个虚拟的表,是基于一个或多个基本表或其他视图的查询结果集。视图本身不占据物理储存空间,仅仅只是一个查询的逻辑表示,物理上依赖于数据表的数据。 视图具有简单,安全,逻辑数据独立&#…...
鸿蒙OS启动流程
启动流程(基于openharmony4.1) 系统上电加载内核后,按照以下流程完成系统各个服务和应用的启动: 内核加载init进程,一般在bootloader启动内核时通过设置内核的cmdline来指定init的位置。init进程启动后,会挂载tmpfs,…...
服务器数据恢复—EMC存储RAID5磁盘阵列数据恢复案例
服务器数据恢复环境: 一台EMC某型号存储设备,该存储中有一组由12块(包括2块热备盘)STAT硬盘组建的raid5阵列。 服务器故障: 该存储在运行过程中突然崩溃,raid瘫痪。数据恢复工程师到达现场对故障存储设备进…...
使用 `netcat`(nc)工具进行TCP数据发送和接收
Netcat(通常缩写为nc)是一个功能强大的网络工具,常被称为“瑞士军刀”的网络工具。它用于在网络上进行各种操作,比如读写网络连接、调试和分析网络服务等。以下是关于Netcat的一些详细介绍: ### 主要功能 1. **TCP/U…...
Linux虚拟化技术嬗变综述
在信息技术飞速发展的今天,虚拟化技术已经成为数据中心、云计算和企业IT基础设施中不可或缺的一部分。Linux操作系统作为开源和灵活的代表,在虚拟化技术的发展中扮演了重要角色。本文将综述Linux虚拟化技术的演变,探讨其优势、应用场景&#…...
.NET 通过C#设置Excel工作表的页面设置
Excel文件数据准备就绪并需要以报告形式呈现时,调整Excel文件的页面设置变得尤为重要,不仅关乎文档的专业外观,还直接影响到打印或电子分享时的可读性和实用性。通过C#来自动化这一过程,不仅可以节省大量手动配置的时间࿰…...
Excel日期导入数据库变为数字怎么办
在Excel导入到数据库的过程中,经常会碰到Excel里面的日期数据,导进去过后变成了数字。 如下图: 使用navicate等数据库编辑器导入数据库后: 原因分析:这是因为日期和时间在excel中都是以数字形式存储的,这个…...
SSL---SSL certificate problem
0 Preface/Foreword 0.1 SSL certificate problem 开发过程中,gitlab-runner连接gitlab时候出现SSL 证书问题。 场景:公司的gitlab runner服务器引入了SSL证书,每年都会主动更新一次。当前的gitlab-runner运行在PC机器上,但是g…...
linux tar 打包文件去掉文件所在路径
一、准备目录 /root/tmp/images /root/tmp/images2 执行命令打包目录/root/tmp/images 到 /root/tmp/images.tar.gz 再解压到/root/tmp/images2 cd /root/tmp/images && tar -cvzf images.tar.gz * && mv images.tar.gz /root/tmp/ tar -C /root/tmp/image…...
MQ快速入门【详细】个人笔记 讲解通俗易懂
1.同步通讯和异步通讯 同步通讯:如果举个例子来说,同步通讯就像是两个人在打电话,一方说的话,能够立马传给另一方,消息的时效性非常高,但是相对的,只能是给一个人通讯,如果这个时候&…...
react实现实时计时的最简方式
js中时间的处理,不借助于moment/dayjs这样的工具库,原生获取格式化的时间,最简单的实现方式可以参考下面这样。 实现效果 代码实现 封装hooks import { useState, useEffect } from "react";export function useCountTime() {c…...
时尚的社会心理机制:求同和树异这对互为矛盾的心理动机,使得人们在社会生活中互相模仿、互相追逐、互相竞争,使得时尚的钟摆永不停息。
文章目录 引言I 时尚时尚的社会心理机制时尚的分类时尚的特点时尚的表现形式II 术语时装周服饰引言 时尚(fad)又称流行,它指在一定时期内社会上或一个群体中普遍流行的,并为大多数所仿效的生活方式或行为模式。 人的心理动机常常是互相矛盾的,既要求同于人,又要求异于人。…...
HarmonyOS NEXT应用开发实战(二、封装比UniApp和小程序更简单好用的网络库)
网络访问接口,使用频次最高。之前习惯了uniapp下的网络接口风格,使用起来贼简单方便。转战到鸿蒙上后,原始网络接口写着真累啊!目标让鸿蒙上网络接口使用,简单程度比肩uniapp,比Axios更轻量级。源码量也不多…...
[Hbase]一 HBase基础
1. HBase简介 1.1 HBase定义 HBase数据模型的关键在于 稀疏、分布式、多维、排序 的映射。其中映射 map指代非关系型数据库的 key-Value结构。 1.2 HBase数据模型 1)Name Space 命名空间,类似于关系型数据库的database 概念,每个命名空间下有多个表。HBase 两个自…...
React.createRef(),React.forwardRef(),forwardRef()结合next.js的link进行路由跳转
码云https://gitee.com/skyvilm/react-next.js 1.React.createRef() 作用:获取dom元素 使用 import React,{Component} from react export default class Index extends Componen{ constructor(props){ super(props) this.myrefReact.createRef(); //创建节点 } c…...
C++从入门到起飞之——AVL树 全方位剖析!
🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1. AVL的概念 2. AVL树的实现 2.1 AVL树的结构 2.2 AVL树的插⼊ >AVL树插⼊⼀个值的⼤概过程 &…...
避坑指南:在Ubuntu 20.04上用XTDrone跑通ORB-SLAM3仿真,我踩过的那些编译坑
避坑指南:Ubuntu 20.04下XTDrone与ORB-SLAM3仿真的深度排雷手册 当你在Ubuntu 20.04上尝试用XTDrone运行ORB-SLAM3仿真时,可能会遇到各种棘手的编译错误和环境配置问题。本文将从实战角度出发,分享我在这一过程中踩过的坑以及如何系统性地解决…...
Umi-OCR:彻底解决你的文字识别难题,这3大功能让你效率翻倍!
Umi-OCR:彻底解决你的文字识别难题,这3大功能让你效率翻倍! 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址…...
【图像计数】基于matlab GUI图像处理颗粒自动计数【含Matlab源码 15231期】
💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞Ὁ…...
WechatDecrypt终极指南:3步轻松解密微信数据库的完整方案
WechatDecrypt终极指南:3步轻松解密微信数据库的完整方案 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 想要找回珍贵的聊天记录却苦于微信加密机制?WechatDecrypt作为一款专业的…...
告别手动调时间!用STM32F4的RTC闹钟和自动唤醒实现一个智能定时提醒器
STM32F4智能定时系统:RTC闹钟与自动唤醒实战指南 在物联网设备开发中,精确的时间管理和低功耗运行往往是产品成功的关键因素。STM32F4系列微控制器内置的RTC(实时时钟)模块,不仅提供精准的日历时钟功能,更通…...
Janus-Pro-7B实战案例:电商商品图识别+营销图自动生成
Janus-Pro-7B实战案例:电商商品图识别营销图自动生成 1. 项目背景与价值 电商行业每天都需要处理海量的商品图片和营销素材。传统方式需要人工识别商品信息、手动设计营销图片,不仅效率低下,成本也很高。Janus-Pro-7B作为统一多模态理解与生…...
OpenClaw安全实践:GLM-4.7-Flash模型权限控制与操作审计
OpenClaw安全实践:GLM-4.7-Flash模型权限控制与操作审计 1. 为什么需要关注OpenClaw的安全配置 去年冬天的一个深夜,我的个人笔记库突然出现了大量异常文件操作记录。当时我正在测试OpenClaw的自动化归档功能,由于没有正确配置权限边界&…...
从OBS源码看WASAPI实战:Windows音频采集的‘静音循环’修复与高精度时间戳处理
从OBS源码剖析WASAPI音频采集:静音循环修复与高精度时间戳的工程实践 在直播软件OBS的音频处理模块中,WASAPI接口的高效运用直接决定了音画同步质量与系统资源占用率。本文将深入OBS源码,揭示其解决Windows音频采集两大核心难题的技术方案&am…...
AndEngine纹理打包优化:使用TexturePackerExtension提升游戏性能
AndEngine纹理打包优化:使用TexturePackerExtension提升游戏性能 【免费下载链接】AndEngine Free Android 2D OpenGL Game Engine 项目地址: https://gitcode.com/gh_mirrors/an/AndEngine 在Android游戏开发中,纹理管理是影响游戏性能的关键因素…...
抖音内容高效下载实战:从单视频到批量采集的完整指南
抖音内容高效下载实战:从单视频到批量采集的完整指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为无法保存喜欢的抖音内容而烦恼吗?是否经常遇到需要批量下载用户主页所有作…...
