接收端

int init_recv_socket(int *pSockfd)
{int recv_sockfd = -1;struct ip_mreq mreq;bzero(&mreq, sizeof(struct ip_mreq));mreq.imr_multiaddr.s_addr = inet_addr(MCAST_ADDR);mreq.imr_interface.s_addr = htonl(INADDR_ANY);struct sockaddr_in server;bzero(&server,sizeof(server));server.sin_family=AF_INET;server.sin_port=htons(MCAST_PORT);server.sin_addr.s_addr= htonl(INADDR_ANY);/*set up the destination address*/memset(&group_addr,0,sizeof(struct sockaddr_in));group_addr.sin_family = AF_INET;group_addr.sin_port = htons(MCAST_PORT);group_addr.sin_addr.s_addr = inet_addr(MCAST_ADDR);group_addr_len = sizeof(group_addr);if((recv_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){printf("Create recv socket failed!\n");return -1;}set_nonblocking(recv_sockfd);if(setsockopt(recv_sockfd, IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {printf("[%s(%d)] Adding multicast group error\n", __FUNCTION__, __LINE__);close(recv_sockfd);return -1;}unsigned char ttl=255;setsockopt(recv_sockfd,IPPROTO_IP,IP_MULTICAST_TTL,&ttl,sizeof(ttl)); int loop=0;if(setsockopt(recv_sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) <0){close(recv_sockfd);return -1;}if(bind(recv_sockfd, (struct sockaddr *)&server, sizeof(server)) == -1){close(recv_sockfd);return -1;}unsigned int value = 1;if(setsockopt(recv_sockfd, SOL_SOCKET, SO_REUSEADDR,(void *)&value,sizeof(value)) <0){close(recv_sockfd);return -1;}set_nonblocking(recv_sockfd);*pSockfd =recv_sockfd;return 0;
}

发送端

int init_send_socket( )
{bzero(&mreq, sizeof (struct ip_mreq));mreq.sin_family = AF_INET;mreq.sin_addr.s_addr= inet_addr(MCAST_ADDR);mreq.sin_port = htons(MCAST_PORT);if((g_send_socket_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){printf("Create socket failed!");return -1;}unsigned char ttl=255;setsockopt(g_send_socket_fd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl,sizeof(ttl)); int loop=0;if(setsockopt(g_send_socket_fd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) <0){close(g_send_socket_fd);return -1;}unsigned int value = 1;if(setsockopt(g_send_socket_fd, SOL_SOCKET, SO_REUSEADDR,(void *)&value,sizeof(value)) <0){close(g_send_socket_fd);return -1;}set_nonblocking(g_send_socket_fd);return 0;
}

Linux组播编程 组播发送和组播接收相关推荐

  1. 嵌入式linux局域网组播发不了,组播 IP_MULTICAST_LOOP回环在Linux和Windows的差异

    在TX2嵌入式开发板上(Ubuntu操作系统)编写网络组播发送接收程序,首先了解一下组播. linux多播编程 linux多播编程步骤: 1>建立一个socket; 2>设置多播的参数,例 ...

  2. 网络编程:组播发送接收

    组播发送 *********************************************************************************************** ...

  3. linux网络编程之二-----多播(组播)编程

    多播编程实例 服务器端 下面是一个多播服务器的例子.多播服务器的程序设计很简单,建立一个数据包套接字,选定多播的IP地址和端口,直接向此多播地址发送数据就可以了.多播服务器的程序设计,不需要服务器加入 ...

  4. Linux C/C++编程之(十九)进程组守护进程

    文章目录 一.概述 二.进程组与守护进程 1. 进程组 2. 进程组操作函数 3. 会话 4. 守护进程 一.概述 二.进程组与守护进程 1. 进程组 进程组,也称之为作业.BSD于1980年前后向U ...

  5. 虚拟机无法接受组播消息_基于UDP的组播通信

    基于UDP的组播通信 在Java实现基于UDP协议的发送端与接收端通信中,我们可以知道它的一些主要操作: 在发送端:1,创建绑定指定端口的发送接口:DatagramSocket(port) 2,创建绑 ...

  6. linux创建组并指定gid的命令,在Linux中用groupadd命令创建组:创建具有特定GID的组及系统组...

    在本文中,我们将讨论如何使用groupadd命令在Linux操作系统中创建新组.在Linux中,组用于组织和管理用户帐户,组的主要目的是为一组可以在组内用户之间共享的给定资源定义一组特权,例如读取.写 ...

  7. linux实验报告用户管理,Linux实验报告-用命令实现用户和组的管理

    河南师范大学综合性 设计性实验项目简介河南师范大学综合性 设计性实验项目简介 学院名称 公章 学院名称 公章 软件学院软件学院 学年学年 20142014 20152015 第第 1 1 学期学期 填 ...

  8. 漫谈Linux文档属性、拥有者、群组、权限

    作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...

  9. 11届蓝桥杯青少年组C++全国赛高级组 六.编程实现:求阶乘(python3实现)

    """ 六.编程实现:求阶乘 https://blog.csdn.net/lybc2019/article/details/120457450提示信息:阶乘定义:一个正整 ...

最新文章

  1. python执行提示包找不到的问题
  2. Typescript学习笔记(二)
  3. 异步GridView(ASPxGridView) 特点介绍(2) - 筛选(Filter)、弹出编辑(Editing)
  4. 使用CSS完美实现垂直居中的方法
  5. centos7不能安装mysql数据库_Centos7 上安装mysql遇上的问题:mysql无法正常启动-Go语言中文社区...
  6. 【算法基础】数据结构导论第三章-栈、队列和数组.pptx
  7. python scrapy教程实例_Python之scrapy实例1
  8. windows上怎么干净彻底的卸载oracle
  9. java二维码生成代码_java快速开发平台功能特点之代码生成器
  10. 【BZOJ3191】【JLOI2013】卡牌游戏 [DP]
  11. HTTP Get与Post的区别
  12. 如何下载ei和sci论文
  13. GNSS 常用缩略语汇总
  14. 【Kettle】如何解决Excel输出卡死或太慢
  15. 使用 Fastlane 上传 App 到蒲公英
  16. 判断PR劫持的目标网站的方法
  17. VLAN划分基础及实例讲解
  18. 数独求解算法效率对比结果
  19. Oracle 数据库自动诊断库 ADR(Automatic Diagnostic Repository)简介 发表在 数据和云
  20. rx560d linux 图形设计,关系steam linux版游戏 使用体会和个人建议

热门文章

  1. 网络的分类(计算机网络)
  2. 计算机网络概述 第二部分
  3. 微信小程序_调用openAi搭建虚拟伙伴聊天
  4. 使用 OBS 进行区域录制
  5. 作为程序员的我,常用的工具软件有这些
  6. [论文阅读:姿态识别Transformer] POET: End-to-End Trainable Multi-Instance Pose Estimation with Transformers
  7. 【MCU】单片机看门狗工作原理
  8. 传输线的物理基础(七):传输线的一阶模型
  9. python求最长公共子串_Python-求解两个字符串的最长公共子序列
  10. 三分钟学会数据库, replace() 替换