当前位置: 首页 > news >正文

组播应用层收不到问题-接收网卡绑定

问题背景:

平台:Android
设备A:组播发送者,发送组播数据
设备B:组播接受者,接收组播数据
设备A与设备B通过有线连接,连接在设备B的eth0网卡上

问题:
设备B在没有通讯模块网卡的情况下收得到设备A的组播数据,一旦有了通讯模块的拨号存在,则收不到A的组播数据了。但设备B上通过抓包,是能确认有抓到组播数据进来,也就是说eth0的网卡上,组播数据是进来了

组播注册伪代码:

int listenSock = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == listenSock){printf("Create socket failed! listenSock=%d\n", listenSock);return -1;}xint32_t opt = 1;
setsockopt(listenSock, SOL_SOCKET, SO_REUSEADDR, (const void *)&opt, sizeof(opt));struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;
addr.sin_port = htons(static_cast<uint16_t>(端口));
addr.sin_addr.s_addr = INADDR_ANY;if (bind(listenSock, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr)) == -1){printf("Bind sock failed!!!\n");close(listenSock);return -1;}struct ip_mreq group;
group.imr_multiaddr.s_addr = inet_addr("组播ip");
group.imr_interface.s_addr = INADDR_ANY;if (setsockopt(listenSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group)) < 0){close(listenSock);printf("Add membership fail! errno:%d\n", errno);return -2;}struct ifreq nif = {0};strcpy(nif.ifr_name, "eth0");if (setsockopt(listenSock, SOL_SOCKET, SO_BINDTODEVICE, (char *)&nif, sizeof(nif)) < 0){close(listenSock);printf("Bind interface=eth0 fail!, errno:%d\n", errno);return -1;}

通过以上代码,在存在通讯模块的时候是收不到的。也怀疑过是否是因为被添加了filter导致,后面也排除了,那么还有种可能,就是绑定网卡并没有生效,我们虽然socket绑定到了eth0,但组播的加入也涉及网卡,我们这个方式因顺序被加入到了其他网卡里,直接看修改,那么在添加组播组的时候也能绑定网卡,修改后的伪代码如下:

int listenSock = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == listenSock){printf("Create socket failed!!! listenSock=%d\n", m_listenSock);return -1;}xint32_t opt = 1;setsockopt(listenSock, SOL_SOCKET, SO_REUSEADDR, (const void *)&opt, sizeof(opt));struct sockaddr_in localAddr;
memset(&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
inet_pton(AF_INET, "组播ip", &localAddr.sin_addr);
localAddr.sin_port = htons((uint16_t)端口);
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);if (::bind(listenSock, reinterpret_cast<struct sockaddr*>(&localAddr), sizeof(localAddr)) == -1){printf("Bind sock failed!!!\n");close(listenSock);return -1;}struct ifreq nif;memset(&nif, 0, sizeof(ifreq));strcpy(nif.ifr_name, "eth0");if (::setsockopt(listenSock, SOL_SOCKET, SO_BINDTODEVICE, (char *)&nif, sizeof(ifreq)) < 0){close(listenSock);printf("Bind interface=eth0 fail!, errno:%d\n", errno);return -1;}//关键修改在这struct ip_mreqn group;group.imr_multiaddr.s_addr = inet_addr("组播ip");group.imr_address.s_addr = htonl(INADDR_ANY);group.imr_ifindex = if_nametoindex("eth0");//在添加组的时候, 指定网卡if (::setsockopt(listenSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group)) < 0){close(listenSock);printf("Add membership interface=eth0 fail!, errno:%d\n", errno);return -2;}

也看到了,结构体用得也不一样了,其实 ip_mreq 与 ip_mreqn时差不多的含义

//来源:#include <in.h>
/* Internet address. */
struct in_addr {__be32  s_addr;
};/* Request struct for multicast socket ops */
struct ip_mreq  {struct in_addr imr_multiaddr;   /* IP multicast address of group */ //组播组组地址struct in_addr imr_interface;   /* local IP address of interface */ // 组播组的的网卡ip, 对应的网卡能够接收对应多播组的数据包
};struct ip_mreqn {struct in_addr  imr_multiaddr;      /* IP multicast address of group */struct in_addr  imr_address;        /* local IP address of interface */ //组播组的的网卡ip, 对应的网卡能够接收对应多播组的数据包int     imr_ifindex;        /* Interface index */ //加入组播组的网卡index,优先级高于以上地址
};

可以看到以下,ip_mreqn明确多了一个网卡指定。我在使用ip_mreq的时候也尝试过将imr_interface指定为我eth0的ip来绑定,仍然无效。如果不是要收多个网卡的,可以使用以上方式修改,记录借鉴

相关文章:

组播应用层收不到问题-接收网卡绑定

问题背景&#xff1a; 平台&#xff1a;Android 设备A&#xff1a;组播发送者&#xff0c;发送组播数据 设备B&#xff1a;组播接受者&#xff0c;接收组播数据 设备A与设备B通过有线连接&#xff0c;连接在设备B的eth0网卡上 问题&#xff1a; 设备B在没有通讯模块网卡的情况…...

回流重绘零负担,网页加载快如闪电

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、回…...

QT5.15在Ubuntu22.04上编译流程

在我们日常遇到的很多第三方软件中&#xff0c;有部分软件针对开发人员&#xff0c;并不提供预编译成果物&#xff0c;而是需要开发人员自行编译&#xff0c;此类问题有时候不是问题&#xff08;编译步骤的doc详细且清晰时&#xff09;&#xff0c;但有时候又很棘手&#xff08…...

【电路笔记】-交流波形和交流电路理论

交流波形和交流电路理论 文章目录 交流波形和交流电路理论1、概述2、交流发电2.1 涡轮发电2.2 变压器 3、交流功率3.1 RMS值3.2 功率分配 4、总结 当谈论电流或电压时&#xff0c;这些信号可以分为两大类&#xff1a;直流和交流。 DC 状态为“直流电”&#xff0c;该定义重新组…...

vue2 系列:自定义 v-model

1. input 中的 v-model <!-- 表单双向绑定 --> <input :value"username" input"username $event.target.value" /> <!-- 等于 --> <input v-model"username" /> 2. 自定义组件 v-model <!-- 组件双向绑定 -->…...

广东木模板批发,建筑桥梁工程专用组合木模板

作为广东地区的木模板批发商&#xff0c;我们致力于为建筑行业提供高品质的木模板产品。在众多产品中&#xff0c;我们特别推荐我们的建筑桥梁工程专用组合木模板&#xff0c;为桥梁工程提供卓越的支持和出色的性能。 我们的组合木模板是专为桥梁工程设计的&#xff0c;以满足对…...

工业相机常见的工作模式、触发方式

参考&#xff1a;机器视觉——工业相机的触发应用(1) - 知乎 工业相机常见的工作模式一般分为&#xff1a; 触发模式连续模式同步模式授时同步模式 触发模式&#xff1a;相机收到外部的触发命令后&#xff0c;开始按照约定时长进行曝光&#xff0c;曝光结束后输出一帧图像。…...

【C语言】指针那些事(上)

C语言系列 文章目录 文章目录 一. 字符指针 一.&#xff08;1 &#xff09; 数组创建空间的地址和指针指向的地址 二. 指针数组 二.&#xff08;1&#xff09;指针数组模拟一个二维数组 ​ 三. 数组指针 三.(1)数组指针到底有什么用 对一维数组没有什么用 二.(…...

liunx Centos-7.5上 rabbitmq安装

在安装rabbitmq中需要注意&#xff1a; 1、rabbitmq依赖于erlang&#xff0c;需要先安装erlang 2、erlang和rabbitmq版本有对应关系 可参考网页&#xff1a;https://www.rabbitmq.com/which-erlang.html 第一步&#xff0c;安装编译工具及库文件,如果服务器上已经有了&…...

蓝桥杯学长经验笔记

平台&#xff1a;立扣&#xff0c;牛客网&#xff0c;蓝桥云课 &#xff0c;codeforce刷题时间&#xff1a;刷题时间&#xff1a; 每天&#xff1a;有课一个多小时 周末 3-4 小时&#xff1a;学一部分做一点题书&#xff1a;《算法竞赛从入门到进阶》、《算法笔记》、《算法竞赛…...

开发库介绍

一、开发库选择 1.1 概述 STM32开发相关的库有很多&#xff0c;它们都是为了方便开发者使用STM32微控制器而提供的软件工具。根据不同的功能和层次&#xff0c;可以将它们分为以下几类&#xff1a; CMSIS库&#xff08;Cortex Microcontroller Software Interface Standard&am…...

基于单片机的智能清洁小车设计—控制系统设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究的主要内容和目标二、总体方案设计2.1智能清洁小车的硬件系统组成2.2智能清洁小车的硬件结构图 三、 小车结构设计5.1基本布局和功能分析5.2小车二维及三维图小车三维图&#xff1a; 四、 原理图程序 五、…...

玩转视图变量,轻松实现动态可视化数据分析

前言 在当今数据驱动的世界中&#xff0c;数据分析已经成为了企业和组织中不可或缺的一部分。传统的静态数据分析方法往往无法满足快速变化的业务需求和实时决策的要求。为了更好地应对这些挑战&#xff0c;观测云的动态可视化数据分析应运而生。 在动态可视化数据分析中&…...

【51单片机】:智能施工电梯系统

项目效果&#xff1a; 基于51单片机的智能施工电梯系统 摘 要 智能施工电梯系统目前广泛应用于人们建筑工程中&#xff0c;为人们施工时上下搬运提供了极大的便利。智能施工电梯系统包括密码开启、超重提示&#xff0c;电梯运作及相关信息显示等等功能&#xff0c;施工电梯为我…...

前端线上部署,如何通知用户有新版本

前言 version-polling 是一个轻量级的 JavaScript 库&#xff0c;它可以实时检测 web 应用的 index.html 文件内容是否有变化。当服务端发布新版本后&#xff0c;前端会自动弹出更新提示&#xff0c;让用户刷新页面&#xff0c;以加载最新的资源和功能。这样可以提高用户体验和…...

Debezium日常分享系列之:Debezium2.4版本之用于 MongoDB的Debezium 连接器

Debezium日常分享系列之&#xff1a;Debezium2.4版本之用于 MongoDB的Debezium 连接器 一、综述二、改变流三、阅读偏好四、MongoDB 连接器的工作原理五、支持的 MongoDB 拓扑六、所需的用户权限七、逻辑连接器名称八、执行快照九、临时快照十、增量快照1.增量快照流程2.Debezi…...

编程应用场景:便利店商超进销存管理系统软件,试用版可以免费试用下载

编程应用场景&#xff1a;便利店商超进销存管理系统软件&#xff0c;试用版可以免费试用下载 软件特色&#xff1a; 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。软件在关闭的时候&#xff0c;可以设置会员…...

【LInux】进程概念II -- 描述进程

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0. 进程概念1. 描述进程2. 组织进程 0. 进程概念 在初学阶段,我们对进程这个词仅在书上看见过,大多不太理解这个究竟是什么意思…...

紫光集团、展讯通信、锐迪科(RDA)、紫光展锐以及翱捷科技(ASR)关系梳理

紫光集团、展讯通信、锐迪科(RDA)、紫光展锐以及翱捷科技(ASR)关系梳理 参考链接: 一文梳理国产芯片巨头:紫光集团https://zhuanlan.zhihu.com/p/578232102 紫光展锐发展史,曾经的热血海归们如今都去哪了? 然而早在2013年和2014年,展讯和锐迪科就分别被紫光收购。相隔一…...

7.多线程之单例模式

单例模式 文章目录 单例模式1. 什么是单例模式2. 饿汉模式3. 懒汉模式3.1 单线程版&#xff1a;3.2 多线程版 1. 什么是单例模式 单例模式是一种设计模式&#xff0c;常见的设计模式还有工厂模式、建造者模式等。 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码…...

Qwen3-VL-30B部署避坑指南:从下载到运行一气呵成

Qwen3-VL-30B部署避坑指南&#xff1a;从下载到运行一气呵成 1. 为什么选择Qwen3-VL-30B Qwen3-VL-30B是目前通义千问系列中最强大的视觉-语言模型&#xff0c;它在多个方面实现了显著提升&#xff1a; 更优秀的文本理解和生成&#xff1a;能够处理复杂语义和长文本更深入的…...

BilibiliDown:如何高效批量下载B站视频并实现离线收藏管理?

BilibiliDown&#xff1a;如何高效批量下载B站视频并实现离线收藏管理&#xff1f; 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.…...

Wan2.2-I2V-A14B效果展示:水墨风、赛博朋克、胶片质感视频样例

Wan2.2-I2V-A14B效果展示&#xff1a;水墨风、赛博朋克、胶片质感视频样例 1. 惊艳的视频生成能力 Wan2.2-I2V-A14B文生视频模型展现了令人惊叹的创作能力&#xff0c;能够根据简单的文字描述生成高质量、风格多样的视频内容。这款专为RTX 4090D 24GB显存优化的私有部署镜像&…...

3个颠覆性用法:B站字幕提取工具如何改变你的视频创作流程

3个颠覆性用法&#xff1a;B站字幕提取工具如何改变你的视频创作流程 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾经为了获取B站视频的字幕而烦恼&…...

开源工具:IDM Activation Script彻底解决激活弹窗问题的技术方案

开源工具&#xff1a;IDM Activation Script彻底解决激活弹窗问题的技术方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager&#xf…...

Alpine Linux在WSL中的生产力配置:zsh美化+Rust环境搭建

Alpine Linux在WSL中的生产力配置&#xff1a;zsh美化Rust环境搭建 在Windows Subsystem for Linux (WSL)生态中&#xff0c;Alpine Linux以其轻量级和安全性逐渐成为开发者的新宠。本文将带你打造一个兼具美观与高效的Alpine开发环境&#xff0c;特别适合追求极简主义又不愿牺…...

VideoSrt:智能字幕生成工具重新定义视频创作效率

VideoSrt&#xff1a;智能字幕生成工具重新定义视频创作效率 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows VideoSrt是一款基于Golan…...

SoundSwitch音频配置文件深度解析:应用触发和多设备管理的完整指南

SoundSwitch音频配置文件深度解析&#xff1a;应用触发和多设备管理的完整指南 【免费下载链接】SoundSwitch C# application to switch default playing device. Download: https://soundswitch.aaflalo.me/ 项目地址: https://gitcode.com/gh_mirrors/so/SoundSwitch …...

Omni-Vision Sanctuary 开发环境搭建:基于 Ubuntu 与 Anaconda 的完整配置流程

Omni-Vision Sanctuary 开发环境搭建&#xff1a;基于 Ubuntu 与 Anaconda 的完整配置流程 1. 引言 如果你是一名计算机视觉研究者或开发者&#xff0c;想要在本地搭建Omni-Vision Sanctuary模型的开发环境&#xff0c;这篇文章将为你提供一份详细的Ubuntu系统配置指南。我们…...

区块链+AI的致命组合:深扒某DeFi项目的测试黑幕

在数字经济浪潮中&#xff0c;区块链与人工智能&#xff08;AI&#xff09;的融合被视为金融创新的“致命组合”&#xff0c;尤其在去中心化金融&#xff08;DeFi&#xff09;领域&#xff0c;它承诺了前所未有的效率和智能决策能力。然而&#xff0c;这一组合也带来了隐蔽的测…...