UDP 广播/组播
广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址xxx.xxx.xxx.255,将消息发送到在同一广播网络上的每个主机,广播/组播只能用udp进行实现
函数:int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_toptlen);
参数:
sockfd:要设置的套接字描述符。
level:选项定义的层次。或为特定协议的代码(如IPv4,IPv6,TCP,SCTP),或为通用套接字代码(SOL_SOCKET)。
optname:选项名。level对应的选项,一个level对应多个选项,不同选项对应不同功能。
optval:指向某个变量的指针,该变量是要设置新值的缓冲区。可以是一个结构体,也可以是普通变量
optlen:optval的长度。
关于optname的可选项,根据你需要的功能进行设置
当leve为SOL_SOCKET时,optname可以有以下选项(一部分)
SO_BROADCAST 允许发送广播数据 int
SO_DEBUG 允许调试 int
SO_LINGER 延迟关闭连接 struct linger
SO_OOBINLINE 带外数据放入正常数据流 int
SO_RCVBUF 接收缓冲区大小 int
SO_SNDBUF 发送缓冲区大小 int
SO_RCVLOWAT 接收缓冲区下限 int
SO_SNDLOWAT 发送缓冲区下限 int
SO_RCVTIMEO 接收超时 struct timeval
SO_SNDTIMEO 发送超时 struct timeval
流程:socket---setsockopt----sendto---close 值得注意的是 你的接收端必须和发送端保持一致的端口号,用广播地址进行发送,只要在同一局域网,且端口号一致的,都会收到发送端的消息,广播地址可以用ifconfig进行查看,接收方只需要接收就行了
出现的错误:发送端和接收端没有问题,但接收端死活接收不到消息,用准确的ip地址发就可以,用广播地址就是接收不到消息,后面我把接收端的ip地址改成:INADDR_ANY ,就可以
INADDR_ANY:表示本机上所有的ip地址,转换过来就是0.0.0.0,因为电脑不止一块网卡。多网卡情况下,ip地址也就多了
udp广播 发送端
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>void main(int argc,char ** argv)
{if(argc != 3){printf("argc error!\n");exit(-1);}int fd;char buf[128];struct sockaddr_in client;//1.socketfd = socket(AF_INET,SOCK_DGRAM,0);if(fd < 0){perror("socket");}elseprintf("socket succeed!\n");//2.setsockoptint so_broadcast = 1;setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &so_broadcast, sizeof(so_broadcast));//SO_BROADCAST:为配置广播选项,// so_broadcast :0,关闭广播;1:开
启广播client.sin_family = AF_INET;client.sin_port = htons(atoi(argv[2]));inet_aton(argv[1],&client.sin_addr);//3.sendtowhile(1){memset(buf,'\0',sizeof(buf));printf("请输入您要发的消息:");gets(buf);if(!strncasecmp(buf,"quit",4)){break;}sendto(fd,buf,sizeof(buf),0,(struct sockaddr *)&client,sizeof(client));}printf("客户端已退出-----\n");//4.closeclose(fd);
}
组播弥补了广播的不足,他是将想要收到消息的主机,通过组播地址加入到这个组播,只有加入了组播的主机,才会收到消息,组播地址范围:224.0.0.0 到 239.255.255.255
流程:socket--bind-- 加入多播组(结构体)---setsockopt(打开组播)---recvfrom---close
发送端只需要和接收端保持一致的端口号,用组播地址进行发送,加入到组播的主机就会收到消息
struct ip_mreq
{ struct in_addr imn_multiaddr; // 多播组 IP,struct in_addr imr_interface; // 将谁的IP添加到多播组
};
组播接收端
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>#define SIZE 128void main(int argc,char **argv)
{int fd;int bFlag;char buf[128];struct sockaddr_in server;struct sockaddr_in client;//1.socketfd = socket(AF_INET,SOCK_DGRAM,0);if(fd < 0){printf("socket error!\n");}elseprintf("socket succeed!\n");//2.bindserver.sin_family = AF_INET;server.sin_port = htons(8881);//inet_aton(argv[1],&server.sin_addr);server.sin_addr.s_addr = INADDR_ANY;bFlag = bind(fd,(struct sockaddr *)&server,sizeof(struct sockaddr_in));if(bFlag < 0){printf("绑定失败\n");}elseprintf("绑定成功!\n");//3.加入多播组struct ip_mreq zuBo;//组播相关的结构体zuBo.imr_multiaddr.s_addr = inet_addr("224.0.0.1");//加入多播组 224.0.0.1~239.255.255.254zuBo.imr_interface.s_addr = INADDR_ANY;//本机加入多播组//4.设置网络属性 setsockoptint req = 1;setsockopt(fd,IPPROTO_IP,IP_DROP_MEMBERSHIP,&req,sizeof(req));//5.recvfromwhile(1){memset(buf,'\0',sizeof(buf));recvfrom(fd,buf,sizeof(buf),0,(struct sockaddr *)&client,sizeof(client));printf("来自组播:%s:%s\n",inet_ntoa(client.sin_addr),buf);}//6.close
}
相关文章:
UDP 广播/组播
广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址xxx.xxx.xxx.255,将消息发送到在同一广播网络上的每个主机,广播/组播只能用udp进行实现 函数:int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_topt…...
高效创作助手:ChatGPT最新版实现批量撰写聚合文章的全新水平
随着人工智能技术的不断发展,ChatGPT最新版作为一款智能创作助手,实现了批量撰写聚合文章的全新水平。它能够在短时间内生成高质量的文章,极大地提高了创作效率。本文将从随机8-20个方面对ChatGPT最新版进行详细的阐述,让我们一起…...
Python中的包是什么,如何创建和使用包?
在Python中,包是一种将相关模块分组在一起的方式。它可以让我们更好地组织和重用代码。 一个Python包实际上是一个文件夹,其中包含该包的Python模块和其他资源文件(例如配置文件、数据文件等)。包的根目录通常包含一个名为__init…...
Spring Cloud Alibaba Seata(二)
目录 一、Seata 1、Seata-AT模式 1.1、具体案例 1.2、通过Seata的AT模式解决分布式事务 2、Seata-XA模式 3、Seata-TCC模式 4、Seata-SAGA模式 一、Seata 1、Seata-AT模式 概念:AT模式是一种无侵入的分布式事务解决方案,在 AT 模式下,…...
如何在 MySQL 中使用 COALESCE 函数
1. 简介 在 MySQL 中,COALESCE 函数可以用来返回参数列表中的第一个非空值。如果所有参数都为空,则返回 NULL。本文将介绍 COALESCE 函数的语法和用法,并通过示例演示其效果。 2. 语法 COALESCE 函数的语法如下所示: COALESCE(…...
Python爬虫之Scrapy框架系列(22)——初识分布式爬虫scrapy_redis
目录: 分布式爬虫(Scrapy\_redis):1.简单介绍:2.Scrapy_redis的安装:分布式爬虫(Scrapy_redis): 官方文档:https://scrapy-redis.readthedocs.io/en/stable/1.简单介绍: scrapy_redis是一个基于Redis的Scrapy组件,用于scrapy项目的分布式部署和开发。 特点: 分布…...
ChatGPT的前世今生
原文首发于博客文章ChatGPT发展概览 ChatGPT 是OpenAI开发的人工智能聊天机器人程序,于2022年11月推出。该程序使用基于 GPT-3.5、GPT-4 架构的大语言模型并以强化学习训练。ChatGPT目前仍以文字方式交互,而除了可以用人类自然对话方式来交互,…...
WireShark常用协议抓包与原理分析
1.ARP协议(地址解析协议) nmap 发现网关nmap -sn 192.168.133.2wireshark 抓请求包和响应包 arp请求包内容 arp响应包内容 总结:请求包包含包类型(request),源IP地址,源MAC地址,目标IP地址,目标MAC地址(未知,此处为全0);响应包包含包类型(reply),源IP地址,源…...
Mysql数据库操作总结
文章目录 1. DDL(Data Definition Language - 数据定义语言)1.1 数据库1.2 数据表(创建查询删除)1.3 数据表(修改) 2. 数据类型2.1 数值2.2 字符2.3 日期 3. 字段约束3.1 约束3.2 主键约束修改3.3 主键自增 联合主键 4. DML(Data Manipulation Language - 数据操作语言)4.1 添…...
在 ZBrush、Substance 3D Painter 和 UE5 中创作警探角色(P2)
大家好,下篇分享咱们继续来说警探角色的重新拓扑、UV、材质贴图和渲染处理。 重新拓扑/UV 这是对我来说最不有趣的部分——重新拓扑。它显然是实时角色中非常重要的一部分,不容忽视,因为它会影响大量的 UV、绑定和后期渲染,这里…...
如何在大规模服务中迁移缓存
当您启动初始服务时,通常会过度设计以考虑大量流量。但是,当您的服务达到爆炸式增长阶段,或者如果您的服务请求和处理大量流量时,您将需要重新考虑您的架构以适应它。糟糕的系统设计导致难以扩展或无法满足处理大量流量的需求&…...
【GPT LLM】跟着论文学习gpt
GPT1开山之作:Improving language understanding by generative pre-training 本文提出了gpt1,即使用无标签的数据对模型先进行训练,让模型学习能够适应各个任务的通用表示;后使用小部分 task-aware的数据对模型进行微调ÿ…...
【玩转Docker小鲸鱼叭】Docker容器常用命令大全
在 Docker 核心概念理解 一文中,我们知道 Docker容器 其实就是一个轻量级的沙盒,应用运行在不同的容器中从而实现隔离效果。容器的创建和运行是以镜像为基础的,容器可以被创建、销毁、启动和停止等。本文将介绍下容器的这些常用操作命令。 1、…...
专项练习11
目录 一、选择题 1、执行下列选项的程序,输出结果不是Window对象的是() 2、以下哪些代码执行后 i 的值为10: 二、编程题 1、判断 val1 和 val2 是否完全等同 2、统计字符串中每个字符的出现频率,返回一个 Object&…...
ASP.NET+SQL通用作业批改系统设计(源代码+论文)
随着网络高速地融入当今现代人的生活,学校对网络技术的应用也在不断地提高。学校的教学任务十分复杂,工作也很繁琐,在教学任务中,作业的批改也是一个很重要的环节。为了提高老师工作效率,减轻教师的工作强度,提高作业批改的灵活性,《通用作业批改系统》的诞生可以说是事在…...
基于深度学习的高精度打电话检测识别系统(PyTorch+Pyside6+YOLOv5模型)
摘要:基于深度学习的高精度打电话检测识别系统可用于日常生活中或野外来检测与定位打电话目标,利用深度学习算法可实现图片、视频、摄像头等方式的打电话目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…...
Vue搭建智能文本检索视频界面
前言 随着人工智能技术的发展,智能文本检索已经成为了一种非常流行的技术。在视频领域中,智能文本检索技术可以帮助用户快速找到自己需要的视频片段,提高用户的观看体验。本文将介绍如何使用Vue框架搭建一个智能文本检索视频界面,…...
软考A计划-系统集成项目管理工程师-一般补充知识-中
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧ÿ…...
springboot-内置Tomcat
一、springboot的特性之一 基于springboot的特性 自动装配Configuretion 注解 二、springboot内置Tomcat步骤 直接看SpringApplication方法的代码块 总纲: 1、在SpringApplication.run 初始化了一个上下文ConfigurableApplicationContext configurableApplica…...
Flink流批一体计算(2):Flink关键特性
目录 Flink关键特性 流式处理 丰富的状态管理 丰富的时间语义支持 Data pipeline 容错机制 Flink SQL CEP in SQL Flink 应用程序可以消费来自消息队列或分布式日志这类流式数据源(例如 Apache Kafka 或 Kinesis)的实时数据,也可以从各…...
如何将 iQOO 手机备份到Mac
iQOO是vivo旗下的智能手机品牌,以其强劲的性能、出色的游戏体验和极具竞争力的价格而闻名。它深受那些希望以合理价格购买高性能Android手机的用户欢迎。然而,由于缺乏官方的 macOS 管理工具,许多用户发现将 iQOO 手机备份到Mac并非易事。幸运…...
pandas API on Spark 与 pandas / PySpark 互转指南
1. 为什么会有互转需求 pandas API on Spark 的定位很特殊:它既想保留 pandas 的使用体验,又建立在 Spark 的分布式执行之上。因此开发时常见的场景有三种: 已经有 pandas 代码,想迁移到分布式环境已经在用 PySpark DataFrame&…...
ssm+java2026年毕设体育赛事管理系统App【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于赛事管理问题的研究,现有研究主要以大型综合性体育赛事(如奥运会、亚运会)的信息化管理…...
实战应用:基于快马平台开发具备origin高级分析功能的在线工具
今天想和大家分享一个最近用InsCode(快马)平台做的实战项目——开发一个具备Origin高级分析功能的在线工具。作为一个经常需要处理实验数据的科研狗,Origin这类软件的分析功能确实强大,但每次都要安装本地软件实在麻烦。于是就想试试能不能做个在线版&am…...
bilibili-downloader完全指南:从入门到精通的4个关键步骤
bilibili-downloader完全指南:从入门到精通的4个关键步骤 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 一、痛点分析&am…...
工业视觉检测避坑指南:CogBlobTool阈值设置5大常见错误及解决方案
工业视觉检测避坑指南:CogBlobTool阈值设置5大常见错误及解决方案 在工业视觉检测领域,斑点检测(Blob Analysis)是最基础也最关键的环节之一。作为Cognex VisionPro套件中的核心工具,CogBlobTool凭借其强大的图像分割能…...
别再手动改配置了!用Docker Compose一键部署Pikachu靶场,5分钟搞定测试环境
5分钟极速搭建Pikachu靶场:Docker Compose自动化实战指南 每次准备网络安全练习环境时,最头疼的莫过于反复安装配置各种服务——PHP版本不兼容、MySQL连接失败、Web服务器配置错误...这些琐碎问题消耗了本应用于渗透测试学习的宝贵时间。今天要分享的这套…...
YOLOv12模型轻量化实战:应对嵌入式设备资源约束
YOLOv12模型轻量化实战:应对嵌入式设备资源约束 最近几年,目标检测模型在精度上突飞猛进,但随之而来的是模型体积和计算量的急剧膨胀。当你兴冲冲地想把最新的YOLOv12模型部署到Jetson Nano或者树莓派上时,往往会发现现实很骨感&…...
PNAS|收入不足对婴儿早期脑发育的影响
本文揭示了逆境在出生后最早期脑发育阶段中的关键作用。基于 Baby Steps 研究(一项正在进行的纵向研究;在一所服务于贫困与压力发生率较高家庭的初级保健门诊中采集婴儿脑电(EEG)与社会经济地位相关数据)的数据表明&am…...
Magisk完整实践指南:从Root权限获取到系统级定制
Magisk完整实践指南:从Root权限获取到系统级定制 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk Magisk作为Android系统Root权限管理的主流解决方案,提供了系统级定制能力而无需修…...
